在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;
}

我想展示fieldNamesvalues的项目。 我从FireStore获得的确切数据:

enter image description here

我正在使用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个单独的列表视图,但只有fieldNamesvalues的前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中的项目的主要内容,如果未能解决你的问题,请参考以下文章

获取 RecyclerView 中的可见项目

获取 RecyclerView 中的可见项目

Android ViewPager + 带有动态 ListViews 的片段

多个ListViews在android中以编程方式创建

如何重用 RecyclerView 对象、适配器和视图持有者

ListView Flutter 中的 ListViews