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>());