[英]Displaying items in ListViews inside a RecyclerView
我有一個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 :
我希望它如何工作 :
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個values
編輯#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);
在這里,您使用的position
是ListView的適配器位置。 所以你的陳述應該
String tS1 = copyData.get(Recycleview Adapter Position).fieldNames.get(Listview adapter position);
來自您的編輯:
現在我得到了3個單獨的對象,分別是3個單獨的列表視圖,但只有前3個值
原因:
您的第一個適配器(Recyleview適配器)僅運行三次。
如果我理解你的問題。 你需要做這樣的事情:
1)使用copyData列表設置copyData
(您正在正確執行)。
2)在onBindViewHolder
您recycleview的。 生成fieldNames和Values的完整列表並設置Listview適配器
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
YourCustomeListViewAdapter adapter = new YourCustomeListViewAdapter(younewlistwithfieldNamesandvalue)
holder.copyList.setAdapter(adapter);
}
編輯2
您正在循環遍歷copyData。 這是錯的。
for (int i = 0;i<copyData.size();i++)
你需要循環遍歷fieldname和values array.like this
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
for (int i = 0;i<copyData.get(position).fieldNames.size();i++) {
}
for (int i = 0;i<copyData.get(position).values.size();i++) {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.