RecyclerView
是 Android 开发中用于展示大量数据列表的控件,它通过重用视图来提高性能。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。
如果 RecyclerView
不显示来自 JSON 字符串的项目,可能的原因包括:
RecyclerView
的布局管理器或布局文件有问题。以下是一个完整的示例,展示如何从 JSON 字符串中解析数据并显示在 RecyclerView
中:
假设 JSON 字符串如下:
[
{"id": 1, "name": "Item 1"},
{"id": 2, "name": "Item 2"},
{"id": 3, "name": "Item 3"}
]
使用 Gson 库解析 JSON:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.List;
public class JsonUtils {
public static List<Item> parseJson(String jsonString) {
Gson gson = new Gson();
Type type = new TypeToken<List<Item>>(){}.getType();
return gson.fromJson(jsonString, type);
}
}
class Item {
int id;
String name;
public Item(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder> {
private List<Item> itemList;
public ItemAdapter(List<Item> itemList) {
this.itemList = itemList;
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
Item item = itemList.get(position);
holder.textView.setText(item.getName());
}
@Override
public int getItemCount() {
return itemList.size();
}
static class ItemViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ItemViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.textView);
}
}
}
RecyclerView
在 Activity 或 Fragment 中设置 RecyclerView
:
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private ItemAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
String jsonString = "[{\"id\": 1, \"name\": \"Item 1\"}, {\"id\": 2, \"name\": \"Item 2\"}, {\"id\": 3, \"name\": \"Item 3\"}]";
List<Item> itemList = JsonUtils.parseJson(jsonString);
adapter = new ItemAdapter(itemList);
recyclerView.setAdapter(adapter);
}
}
activity_main.xml
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
item_layout.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp" />
</LinearLayout>
通过以上步骤,你应该能够正确解析 JSON 数据并在 RecyclerView
中显示这些项目。如果仍然遇到问题,请检查日志输出以获取更多详细信息,并根据错误信息进行调试。
领取专属 10元无门槛券
手把手带您无忧上云