gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:18:39 26 4
gpt4 key购买 nike

我有一个带有适配器的 ListView ,该适配器在其构造函数中接收ArrayListArrayList 被分配给一个内部变量 - 就像这样:

ArrayList<Someobject> mylist;

constructor(ArrayList<Someobject> inputList) {
this.mylist = inputList;
}

然后我在 getView() 方法中使用这个 ArrayList 来使用 viewholder 模式构建我的列表小部件。问题是 - 当我使用 adapter.clear()adapter.addAll(somenewArray) 时 - 适配器如何知道替换我的适配器的 ArrayList > 变量用新的还是要清除呢?据我所知 - 事实并非如此。我的 getview() 看起来像这样:

public View getView(final int position, View convertView, ViewGroup parent) {
...
setValueTo(mylist.get(position));
}

无论我将什么传递给 addAll(),变量“mylist”始终保持不变。我觉得我错过了这个机制运作方式的一些基本内容 - 谁能帮我弄清楚什么?

我最初认为每次调用 addAll() 时适配器都会被销毁并自动重新创建(因此其内部数组列表会发生变化),但构造函数在初始创建后不会再次被调用。

解决此问题的正确方法是重写 addAll() 并执行以下手动操作:

this.mylist = newlist;

最佳答案

使用notifyDataSetChanged()
对于 ArrayAdapter,notifyDataSetChanged 仅当您在 Adapter 上使用 add()、insert()、remove() 和clear() 时才有效。
就像

inputList.add(..);
adapter.notifyDataSetChanged();

关于java - addAll 如何在 android 列表适配器中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28216807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com