在RecyclerView内部的ListViews中显示项目

时间:2019-04-12 10:09:26

标签: java android listview android-recyclerview android-listview

我想显示一个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获得的确切数据

enter image description here

我正在使用values ListView 中显示它们。
这是代码:

simple_list_item_2

当前行为:recyclerView显示的 3个ListViews 包括:

  • copyData0.fieldNames0 =>“默认”
  • copyData0.values0 =>“ false”
  • copyData1.fieldNames1 =>“ Pont”
  • copyData1.fieldNames1 =>“ 9”
  • copyData1.fieldNames1 =>“实体名称”
  • copyData1.fieldNames1 =>“Analízispontok”

我希望它如何工作
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中显示最后一个对象的所有字段名称/值对

1 个答案:

答案 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++) {
  }
}