在 RecyclerView 内的 ListViews 中显示项目
Posted
技术标签:
【中文标题】在 RecyclerView 内的 ListViews 中显示项目【英文标题】:Displaying items in ListViews inside a RecyclerView 【发布时间】:2019-09-03 01:56:57 【问题描述】:我有一个List<CopyModel> copyData
,其中包含我的所有数据,我想显示。
CopyModel 类如下所示:
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 => “默认” copyData0.values0 => "假" copyData1.fieldNames1 => "Pont" copyData1.fieldNames1 => "9" copyData1.fieldNames1 => "entity_name" copyData1.fieldNames1 => "Analízis pontok"我希望它如何工作:RecyclerView 将显示与 copyData
大小一样多的列表(在本例中为 3),并且每个 ListView 将具有与其 @ 大小一样多的行数987654330@(现在是 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 个单独的 ListView 中显示最后一个对象的所有字段名值对
【问题讨论】:
【参考方案1】:乍一看,我认为问题是
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 适配器)只运行了 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++)
你需要遍历字段名和值数组。像这样
@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++)
【讨论】:
Recycleview 适配器位置对我来说是“位置”,这段代码在我的“CopyRecyclerViewAdapter.java”文件中,但我真的不知道我应该如何获得适配器的位置。或者如果“位置”是 ListView 适配器的位置,那么我怎样才能得到 RecyclerView 的位置? @MátéAntal 你将Listview's Adapter
设置在RecycleView's adapter
中,对吗?
我需要一个完整的定制适配器吗?我不认为我知道如何编写自定义适配器。我不能在这里用 ArrayAdapter 做吗?另外,在每个 CopyModel 项目中,我有两个单独的列表,一个用于字段名,一个用于值。
如果我要“生成字段名称和值的完整列表”,那么它只会在一个列表视图中显示我的所有名称和值,对吧?我们不能这样做,重要的是 ListView 的数量应该与 copyData 的大小一样多
@MátéAntal 不,您不需要自定义适配器,但为了您的理解,我写了那个。 2)您可以生成一个带有(名称和值)的列表或两个单独的列表。它是您的选择。但逻辑保持不变以上是关于在 RecyclerView 内的 ListViews 中显示项目的主要内容,如果未能解决你的问题,请参考以下文章
垂直 RecyclerView 内的水平 RecyclerView
android: ScrollView 内的 RecyclerView
E/RecyclerView:没有附加适配器;在片段内的recyclerview上跳过布局
在 RecyclerView 内的 ListViews 中显示项目
NestedScrollViewLayout 内的 SwipeRefreshLayout 内的 RecyclerView 无法滚动