Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java addAll如何在android列表适配器中工作?_Java_Android_Listview_Adapter - Fatal编程技术网

Java addAll如何在android列表适配器中工作?

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()。我觉得我在这个机制的运作方式中遗漏了一些基本的东西——有人

我有一个带有适配器的listview,该适配器在其构造函数中接收
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中某个位置的数据,我如何引用它?