Android 如何使用像GridView这样的RecyclerView?

Android 如何使用像GridView这样的RecyclerView?,android,android-recyclerview,Android,Android Recyclerview,我的数据库是这样的 当我在SearchView上搜索我的姓名时,我将向您显示数据 这是适配器的布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="120dp" android:layout_height="wrap_content" android:orienta

我的数据库是这样的

当我在SearchView上搜索我的姓名时,我将向您显示数据

这是适配器的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp">

    <TextView
        android:id="@+id/nameText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_green_light"
        android:gravity="center"
        android:text="Name"
        android:textColor="@android:color/white"
        android:textSize="30sp" />

    <TextView
        android:id="@+id/dataText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_light"
        android:gravity="center"
        android:text="Data No."
        android:textColor="@android:color/white"
        android:textSize="20sp" />
</LinearLayout>
但我不知道如何处理适配器的onBindViewHolder

是适配器

public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {

    List<Data> dataList;
    Context context;

    public Adapter(List<Data> dataList, Context context) {
        this.dataList = dataList;
        this.context = context;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);

        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
//        holder.nameText.setText(dataList.get(position).getName());
//        holder.dataText.setText(dataList.get(position).getData1());
//        holder.dataText.setText(dataList.get(position).getData2());
//        holder.dataText.setText(dataList.get(position).getData3());
//        holder.dataText.setText(dataList.get(position).getData4());
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        TextView nameText, dataText;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            nameText = itemView.findViewById(R.id.nameText);
            dataText = itemView.findViewById(R.id.dataText);
        }
    }
}
公共类适配器扩展了RecyclerView.Adapter{
列表数据列表;
语境;
公共适配器(列表数据列表、上下文){
this.dataList=dataList;
this.context=上下文;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图=LayoutFlater.from(parent.getContext()).flate(R.layout.item_视图,parent,false);
返回新的MyViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder,int位置){
//holder.nameText.setText(dataList.get(position.getName());
//holder.dataText.setText(dataList.get(position.getData1());
//holder.dataText.setText(dataList.get(position.getData2());
//holder.dataText.setText(dataList.get(position.getData3());
//holder.dataText.setText(dataList.get(position.getData4());
}
@凌驾
public int getItemCount(){
返回dataList.size();
}
公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{
文本视图名称文本、数据文本;
公共MyViewHolder(@NonNull View itemView){
超级(项目视图);
nameText=itemView.findviewbyd(R.id.nameText);
dataText=itemView.findViewById(R.id.dataText);
}
}
}

请帮助我…

您可以使用多类型支架

这里有一个很好的例子:

要像
GridView
一样使用
RecyclerView

mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), NUMBER_OF_COLUMN));
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(mAdapter);
但是在您的例子中,我看到您的
数据库
存储为1个对象
响应
包含
名称
数据1
数据2
数据3
数据4
字段

{
   "response":{
      "name":"John",
      "data1":10,
      "data2":20,
      "data3":30,
      "data4":40
   }
}
如果要显示为

JOHN1 JOHN1 JOHN1 JOHN1
10    20    30    40
不要使用
Gridlayout
<代码>网格布局
应在数据如下的情况下使用

{
   "response":[
      {
         "name":"John",
         "data":10
      },
      {
         "name":"John",
         "data":20
      },
      {
         "name":"John",
         "data":30
      },
      {
         "name":"John",
         "data":40
      }
   ]
}

当然,您可以将对象
response
转换为类似下面的json的数组对象,但这不是必需的。只需使用
RecyclerView
就可以了,因为正常情况下是更好的主意

桌状结构是一种非常古老的模式,根据设计指南不被接受。建议使用具有多个
textview
的单卡,其数据可以使用
onBindViewHolder
方法中的
viewHolder
进行设置

请检查此链接以了解详细信息

请检查此链接以了解详细信息

对于
回收视图
,可以使用
交错
网格
布局管理器
,这将为您提供显示数据的良好外观

您可以将这两种样式都签入

如果所有这些都不能说服你,你想坚持你提到的设计,然后,您可以拥有一个
视图夹
,具有
线性布局
水平
方向,通过在对象上循环并设置
标题
描述
值,可以
添加
视图
在这种情况下,标题会重复,并根据设计在屏幕上使用不必要的空间。因此不建议使用此设计


如果有帮助,请告诉我。

您可以使用多类型支架。对不起,我不明白。只有一个POJO,我使用getItemViewType?是的,对于字符串,使用一些holder,如
NameHolder
,对于
int
值,使用一些holder,如
AgeHolder
,如果都是字符串值,可以吗?不,可以用于所有数据类型,锁定在示例中,这非常有用
{
   "response":[
      {
         "name":"John",
         "data":10
      },
      {
         "name":"John",
         "data":20
      },
      {
         "name":"John",
         "data":30
      },
      {
         "name":"John",
         "data":40
      }
   ]
}