在 RecyclerView 中的 ListViews 中显示项目
Displaying items in ListViews inside a RecyclerView
我有一个List<CopyModel> copyData
,里面有我所有的数据,我想显示。
CopyModel class 看起来像这样:
public class CopyModel {
public String autoId;
public List<String> fieldNames;
public List<Object> values;
}
我想显示 fieldNames
和 values
的项目。
我从 FireStore 获得的确切数据:
我在 ListView 中显示它们,simple_list_item_2
。
这是代码:
@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 => "default"
- copyData0.values0 => "false"
- copyData1.fieldNames1 => "Pont"
- copyData1.fieldNames1 => "9"
- copyData1.fieldNames1 => "entity_name"
- copyData1.fieldNames1 => "Analízis pontok"
我希望它如何工作:
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);
}
}
这样我就可以将每个字段名-值对添加到列表中,但它的行为就像是,它遍历了这两行
final List<String> names = copyData.get(i).fieldNames;
final List<Object> values = copyData.get(i).values;
3 次,然后在 3 个单独的 ListViews
中显示最后一个对象的所有字段名-值对
乍一看我认为问题是
String tS1 = copyData.get(position).fieldNames.get(position);
这里您使用的是 position
,这是 Listview 的适配器位置。所以你的声明应该
String tS1 = copyData.get(Recycleview Adapter Position).fieldNames.get(Listview adapter position);
来自您的编辑:
Now I'm getting the 3 seperate objects, in 3 seperate listview, but
only the first 3 values
原因:
你的第一个适配器(Recyleview适配器)只运行三次。
如果我理解你的问题。你需要做这样的事情:
1) 使用 copyData
列表设置你的 Recycleview(你做得很好)。
2) 在您的回收视图的 onBindViewHolder
中。生成字段名称和值的完整列表并设置您的列表视图适配器
@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++)
您需要遍历字段名和值 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++) {
}
}
我有一个List<CopyModel> copyData
,里面有我所有的数据,我想显示。
CopyModel class 看起来像这样:
public class CopyModel {
public String autoId;
public List<String> fieldNames;
public List<Object> values;
}
我想显示 fieldNames
和 values
的项目。
我从 FireStore 获得的确切数据:
我在 ListView 中显示它们,simple_list_item_2
。
这是代码:
@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 => "default"
- copyData0.values0 => "false"
- copyData1.fieldNames1 => "Pont"
- copyData1.fieldNames1 => "9"
- copyData1.fieldNames1 => "entity_name"
- copyData1.fieldNames1 => "Analízis pontok"
我希望它如何工作:
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
编辑#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);
}
}
这样我就可以将每个字段名-值对添加到列表中,但它的行为就像是,它遍历了这两行
final List<String> names = copyData.get(i).fieldNames;
final List<Object> values = copyData.get(i).values;
3 次,然后在 3 个单独的 ListViews
乍一看我认为问题是
String tS1 = copyData.get(position).fieldNames.get(position);
这里您使用的是 position
,这是 Listview 的适配器位置。所以你的声明应该
String tS1 = copyData.get(Recycleview Adapter Position).fieldNames.get(Listview adapter position);
来自您的编辑:
Now I'm getting the 3 seperate objects, in 3 seperate listview, but only the first 3 values
原因:
你的第一个适配器(Recyleview适配器)只运行三次。
如果我理解你的问题。你需要做这样的事情:
1) 使用 copyData
列表设置你的 Recycleview(你做得很好)。
2) 在您的回收视图的 onBindViewHolder
中。生成字段名称和值的完整列表并设置您的列表视图适配器
@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++)
您需要遍历字段名和值 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++) {
}
}