微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在android中以编程方式创建多个ListView

我尝试在 android 中以编程方式创建 n 个列表视图。但是 Adapter UI 总是显示所有列表视图中的最后一个列表视图元素。

例如:我想以编程方式创建 20 个列表视图,每个列表视图都有不同的行值。但是在所有 20 个列表视图中都显示了相同的列表视图元素,它们是我的第 20 个列表视图的元素。

请检查以下代码

  LinearLayout linear = findViewById(R.id.linear);
    ListView modeList;
    ArrayList<String> stringArrayList = new ArrayList<>();
    for(int i=0; i<=20; i++){
        modeList = new ListView(this);
        stringArrayList.clear();
        for(int k=0; k<=2; k++){
            stringArrayList.add("i="+i);
        }
        listadapters childChooseMusicAdapter = new listadapters(this,stringArrayList);
        modeList.setAdapter(childChooseMusicAdapter);
        linear.addView(modeList);
    }

当上面的代码运行时,它显示了所有的20个listview,但所有listview的数据都是一样的。

并在输出显示

**list 0**
i= 20
i= 20
i= 20

**list 1**
i= 20
i= 20
i= 20

-
-
-

**list 20**
i= 20
i= 20
i= 20

但我想要这样的输出

**list 0**
i= 0
i= 0
i= 0

**list 1**
i= 1
i= 1
i= 1

-
-
-

**list 20**
i= 20
i= 20
i= 20

解决方法

由于 stringArrayList 对象对于所有适配器都是相同的,因此它显示所有列表视图中最后更新的项目。所以为每个列表视图创建新的数组列表,如下所示,

LinearLayout linear = findViewById(R.id.linear);
ListView modeList;
ArrayList<String> stringArrayList;
for(int i=0; i<=20; i++){
   modeList = new ListView(this);
   stringArrayList = new ArrayList<>();
   for(int k=0; k<=2; k++){
      stringArrayList.add("i="+i);
   }
   ListAdapters childChooseMusicAdapter = new ListAdapters(this,stringArrayList);
   modeList.setAdapter(childChooseMusicAdapter);
   linear.addView(modeList);
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。