Android 如何使用像GridView这样的RecyclerView?
我的数据库是这样的 当我在SearchView上搜索我的姓名时,我将向您显示数据 这是适配器的布局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
<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
}
]
}