gpt4 book ai didi

java - 传递给 List 的 ArrayAdapter 的 arraylist 应该是线程安全的吗?

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

我们传递给自定义数组适配器的数组列表是否应该以线程安全的方式修改它?
我的意思是如果我有 private class MyAdapter extends ArrayAdapter<CustomObject>我用我的 ArrayList 实例化它的CustomObject如果我稍后想要修改该数组列表或数组列表中的对象,以便通知适配器应该更新 UI,我应该以线程安全的方式执行此操作吗?例如。传递同步数组列表?

最佳答案

如果您修改主/UI 线程上的列表,则继续。 ListView 本身也在 UI 线程上运行。

如果您从另一个线程更改列表,您可能必须处理同步问题。尽管当 ListView 不滚动(即不访问适配器)时,它不应该引起任何问题。

要随时从另一个线程更改列表,您必须将所有更改发布到 UI 线程。

// this code is executed in another thread
// e.g. download some data
// determine which list elements get changed

// post to UI thread
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
// change th actual list here and notifyDataSetChanged()
}
});

如果确定需要更改哪些元素太复杂,您还可以创建一个新列表和新适配器:

// this code is executed in another thread
// e.g. download some data
// create a new list and/or a new adapter
final MyAdapter adapter = new MyAdapter(...);

// post to UI thread
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
// set the new adapter to the ListView
listview.setAdapter(adapter);
}
});

关于java - 传递给 List 的 ArrayAdapter 的 arraylist 应该是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29742009/

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