Java 用于ListView和线程安全的自定义适配器

Java 用于ListView和线程安全的自定义适配器,java,android,android-asynctask,thread-safety,synchronized,Java,Android,Android Asynctask,Thread Safety,Synchronized,我正在使用不同的线程来清除适配器的列表,有时我会得到一个索引自动边界异常 我想问题是,在自定义适配器的过程中,某个地方填充了 ListVIEW < /C> >,第二个线程调用清单.Culter()/Case>导致列表。siz()返回0,导致某个界外某处。 如何使用synchronized使这个线程安全(在这种情况下可以解决这个问题) Edit:我认为问题在于AsyncTask正在清除ArrayAdapter子类使用的列表,有没有办法更改适配器使用的list List<Item> li

我正在使用不同的
线程来清除适配器的
列表
,有时我会得到一个
索引自动边界异常

我想问题是,在自定义适配器的过程中,某个地方填充了 ListVIEW < /C> >,第二个线程调用<代码>清单.Culter()/Case>导致<代码>列表。siz()<代码>返回0,导致某个界外某处。

如何使用synchronized使这个线程安全(在这种情况下可以解决这个问题)


Edit:我认为问题在于
AsyncTask
正在清除
ArrayAdapter
子类使用的列表,有没有办法更改适配器使用的
list

List<Item> list = Collections.synchronizedList(new ArrayList<Item>());
List List=Collections.synchronizedList(新的ArrayList());

如果有更多的代码就好了

如果使用
AsyncTask
,当您想清除丢失的任务时,应该在
doInBackground()
方法中调用
publishProgress()
,然后在
onProgressUpdate()
add()
remove()
)中进行清除。您应该避免从UI线程外部操作UI元素


为什么不用新列表设置一个新适配器呢?因此,您可以异步创建列表,然后在UI线程中调用
ListView.setAdapter()
(例如在
onProgressUpdate()
onPostExecute()
)。

我正在从服务器获取新数据,这就是为什么在单独的线程中清除并重新填充列表的原因。这个解决方案适用于这种情况吗?
List<Item> list = Collections.synchronizedList(new ArrayList<Item>());