我想显示一个On 12.04.2019,06 am the reminder is to Complete project
的所有数据。
CopyModel类如下所示:
List<CopyModel> copyData
我想显示public class CopyModel {
public String autoId;
public List<String> fieldNames;
public List<Object> values;
}
和fieldNames
的项目。
我从FireStore获得的确切数据:
我正在使用values
在 ListView 中显示它们。
这是代码:
simple_list_item_2
当前行为:recyclerView显示的 3个ListViews 包括:
我希望它如何工作:
RecyclerView 将显示与@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);
}
大小一样多的列表(在本例中为3),并且每个 ListView 都将具有与...大小相同的行。的copyData
(现在是5,但可以是其他任意值)
编辑:
fieldNames
现在我在3个单独的列表视图中获得3个单独的对象,但是只有 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);
和fieldNames
的前3个值
EDIT#2 :
values
这样,我可以将每个fieldname-value对添加到列表中,但是它的行为就像遍历了这两行一样
@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);
}
}
3次,然后在3个单独的ListViews中显示最后一个对象的所有字段名称/值对
答案 0 :(得分:1)
乍一看,我认为问题是
String tS1 = copyData.get(position).fieldNames.get(position);
这里您使用的是position
,它是Listview的Adapters位置。所以你的陈述应该
String tS1 = copyData.get(Recycleview Adapter Position).fieldNames.get(Listview adapter position);
来自您的编辑:
现在我在3个单独的listview中获得3个单独的对象,但是 只有前三个值
原因:
您的第一个适配器(Recyleview适配器)仅运行3次。
如果我理解你的问题。您需要执行以下操作:
1)使用copyData
列表(您做得很好)设置您的Recycleview。
2)在您的回收视图的onBindViewHolder
中。生成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数组。像这样
@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++) {
}
}