多个 ListViews 在 android 中以编程方式创建
Multiple ListViews Create programmatically in android
我试图在 android 中以编程方式创建 n 个列表视图。但是适配器 UI 始终显示所有列表视图中的最后一个列表视图元素。
例如:我想以编程方式创建 20 个列表视图,每个列表视图都有不同的行值。但是在所有20个listviews中显示相同的listview元素,这是我第20个listview的元素。
请检查以下代码:
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);
}
我试图在 android 中以编程方式创建 n 个列表视图。但是适配器 UI 始终显示所有列表视图中的最后一个列表视图元素。
例如:我想以编程方式创建 20 个列表视图,每个列表视图都有不同的行值。但是在所有20个listviews中显示相同的listview元素,这是我第20个listview的元素。
请检查以下代码:
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);
}