【问题标题】:Multiple ListViews Create programmatically in android多个ListViews在android中以编程方式创建
【发布时间】:2021-05-31 16:18:04
【问题描述】:

我尝试在 android 中以编程方式创建 n 个列表视图。但适配器 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

【问题讨论】:

    标签: android listview arraylist adapter programmatically


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-29
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多