簡體   English   中英

在RecyclerView中顯示ListViews中的項目

[英]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;
}

我想顯示fieldNamesvalues項目。
我從FireStore獲得的確切數據

在此輸入圖像描述

我正在使用simple_list_item_2ListView中顯示它們。
這是代碼:

@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”
  • copyData1.fieldNames1 =>“Pont”
  • copyData1.fieldNames1 =>“9”
  • copyData1.fieldNames1 =>“entity_name”
  • copyData1.fieldNames1 =>“Analízispont”

我希望它如何工作
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個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM