Java addAll如何在android列表适配器中工作?
我有一个带有适配器的listview,该适配器在其构造函数中接收Java addAll如何在android列表适配器中工作?,java,android,listview,adapter,Java,Android,Listview,Adapter,我有一个带有适配器的listview,该适配器在其构造函数中接收ArrayList。ArrayList分配给一个内部变量,如下所示: ArrayList<Someobject> mylist; constructor(ArrayList<Someobject> inputList) { this.mylist = inputList; } 而变量“mylist”始终保持不变,无论我传入addAll()。我觉得我在这个机制的运作方式中遗漏了一些基本的东西——有人
ArrayList
。ArrayList
分配给一个内部变量,如下所示:
ArrayList<Someobject> mylist;
constructor(ArrayList<Someobject> inputList) {
this.mylist = inputList;
}
而变量“mylist”始终保持不变,无论我传入addAll()
。我觉得我在这个机制的运作方式中遗漏了一些基本的东西——有人能帮我弄清楚是什么吗
我原本以为每次调用addAll()
时,适配器都会被销毁并自动重新创建(因此它的内部arraylist会发生变化),但在初始创建之后,构造函数就再也不会被调用了
解决此问题的正确方法是覆盖addAll()
并执行以下手动操作:
this.mylist = newlist;
?适配器中不应该有自己的列表成员。ArrayAdapter本身保存项目列表。 使用适配器中的不同方法(get、add等)后,一切都将按预期工作 您的
getView()
应该如下所示:
public View getView(final int position, View convertView, ViewGroup parent) {
...
setValueTo(mylist.get(position));
}
public View getView(final int position, View convertView, ViewGroup parent) {
....
setValueTo(getItem(position));
}
适配器中不应该有自己的列表成员。ArrayAdapter本身保存项目列表。 使用适配器中的不同方法(get、add等)后,一切都将按预期工作 您的
getView()
应该如下所示:
public View getView(final int position, View convertView, ViewGroup parent) {
...
setValueTo(mylist.get(position));
}
public View getView(final int position, View convertView, ViewGroup parent) {
....
setValueTo(getItem(position));
}
使用
ArrayAdpater
时,该列表已为您“包含”,您无需单独维护。您可以将其视为集合和适配器
像这样向适配器添加项
adapter.add(item);
或
以及在给定位置获取项目:
adapter.getItem(position);
使用
ArrayAdpater
时,该列表已为您“包含”,您无需单独维护。您可以将其视为集合和适配器
像这样向适配器添加项
adapter.add(item);
或
以及在给定位置获取项目:
adapter.getItem(position);
使用notifyDataSetChanged()
对于ArrayAdapter,只有在适配器上使用add()、insert()、remove()和clear()时,notifyDataSetChanged才有效。
像
使用notifyDataSetChanged()
对于ArrayAdapter,只有在适配器上使用add()、insert()、remove()和clear()时,notifyDataSetChanged才有效。
像
我认为在您调用添加所有内容之后,您可以从适配器调用notifyDataSetChanged()。我将触发对附加到它的列表视图的刷新 请参阅文档中的说明 通知附加的观察者基础数据已更改,任何反映数据集的视图都应刷新自身
在这种情况下,您的列表视图应该位于OBerver中。我认为在您调用添加所有内容之后,您可以从适配器调用notifyDataSetChanged()。我将触发对附加到它的列表视图的刷新 请参阅文档中的说明 通知附加的观察者基础数据已更改,任何反映数据集的视图都应刷新自身
在这种情况下,列表视图应该位于OBerver中。适配器使用的内部列表的变量是什么?如果我需要将getView中的数据设置为已传递给适配器的arraylist中某个位置的数据,我如何引用它?适配器使用的内部列表的变量是什么?如果我需要将getView中的数据设置为已传递给适配器的arraylist中某个位置的数据,我如何引用它?