在RecyclerView中显示ListViews中的项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在RecyclerView中显示ListViews中的项目相关的知识,希望对你有一定的参考价值。
我有一个List<CopyModel> copyData
我的所有数据,我想显示。
CopyModel类如下所示:
public class CopyModel {
public String autoId;
public List<String> fieldNames;
public List<Object> values;
}
我想展示fieldNames
和values
的项目。
我从FireStore获得的确切数据:
我正在使用simple_list_item_2
在ListView中显示它们。
这是代码:
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
ArrayAdapter adapter = new ArrayAdapter(mContext, android.R.layout.simple_list_item_2, android.R.id.text1, copyData) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView t1 = view.findViewById(android.R.id.text1);
TextView t2 = view.findViewById(android.R.id.text2);
String tS1 = copyData.get(position).fieldNames.get(position);
t1.setText(tS1);
String tS2 = String.valueOf(copyData.get(position).values.get(position));
t2.setText(tS2);
return view;
}
};
holder.copyList.setAdapter(adapter);
}
当前行为:recyclerView显示3个ListViews:
- copyData0.fieldNames0 =>“默认”
- copyData0.values0 =>“false”
- 复制数据1.fieldNames 1 =>“点”
- copyData1.fieldNames1 =>“9”
- copyData1.fieldNames1 =>“entity_name”
- copyData1.fieldNames1 =>“分析点”
我希望它如何工作:
RecyclerView将显示与copyData
(在本例中为3)的大小一样多的列表,并且每个ListView将具有与其fieldNames
的大小一样多的行(现在它是5,但可以是任何其他)
编辑:
String tS1 = copyData.get(holder.getAdapterPosition()).fieldNames.get(position);
t1.setText(tS1);
String tS2 = String.valueOf(copyData.get(holder.getAdapterPosition()).values.get(position));
t2.setText(tS2);
现在我得到了3个单独的对象,分别是3个单独的列表视图,但只有fieldNames
和values
的前3个值
编辑#2:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
for (int i = 0;i<copyData.size();i++) {
final List<String> names = copyData.get(i).fieldNames;
final List<Object> values = copyData.get(i).values;
//noinspection unchecked
final ArrayAdapter adapter = new ArrayAdapter(mContext, android.R.layout.simple_list_item_2, android.R.id.text1, names) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView t1 = view.findViewById(android.R.id.text1);
TextView t2 = view.findViewById(android.R.id.text2);
String tS1 = names.get(position);
t1.setText(tS1);
String tS2 = String.valueOf(values.get(position));
t2.setText(tS2);
return view;
}
};
holder.copyList.setAdapter(adapter);
}
}
通过这种方式,我可以将每个fieldname-value对添加到列表中,但它的行为类似,它超过了这两行
final List<String> names = copyData.get(i).fieldNames;
final List<Object> values = copyData.get(i).values;
3次,然后显示3个单独ListView中最后一个对象的所有fieldname-value对
首先,我认为问题是
String tS1 = copyData.get(position).fieldNames.get(position);
在这里您使用的是qazxsw poi,它是Listview适配器的位置。所以你的陈述应该
position
来自您的编辑:
现在我在3个单独的列表视图中获得3个独立的对象,但只有前3个值
原因:
您的第一个适配器(Recyclerview适配器)仅运行三次。
如果我理解你的问题。你需要做这样的事情:
1)使用 String tS1 = copyData.get(Recycleview Adapter Position).fieldNames.get(Listview adapter position);
列表设置你的Recycleview(你正在做的)。
2)在你的recycleview的copyData
。生成fieldNames和Values的完整列表并设置Listview适配器
onBindViewHolder
编辑2
您正在循环遍历copyData。这是错的。
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
YourCustomeListViewAdapter adapter = new YourCustomeListViewAdapter(younewlistwithfieldNamesandvalue)
holder.copyList.setAdapter(adapter);
}
你需要循环遍历fieldname和values array.like this
for (int i = 0;i<copyData.size();i++)
以上是关于在RecyclerView中显示ListViews中的项目的主要内容,如果未能解决你的问题,请参考以下文章
Android ViewPager + 带有动态 ListViews 的片段