加载我有一个正常的列表视图/ listadapter,我从网络上使用的AsyncTask加载大量数据,如何快速更新的Android的ListView。大约需要5秒钟才能完全下载和解析所有数据。数据从网络
而不是让列表视图空5秒,而我处理的数据,我想作为数据进行处理,使用户可以看到,并通过列表项滚动,因为他们已经准备好更新。处理每个物品需要大约20-50ms,并准备好显示。
可有人请给我拿我如何能做到这一点的一些想法。
我试过这段代码,每500ms只刷新一次。我从当一个新项目已完成正在处理的AsyncTask调用onNewItemReady()每20到50毫秒:
public void onNewItemReady(Object item) {
mData.add(item);
long diff = SystemClock.elapsedRealtime()-mLastRefresh;
if (diff > 500) {
mAdapter.setData(mData);
mAdapter.notifyDataSetChanged();
mLastRefresh = SystemClock.elapsedRealtime();
}
}
,但如果我滚动所有的数据加载之前的列表视图,我收到以下错误:
> 05-04 19:22:59.638: E/AndroidRuntime(24349):
> java.lang.IllegalStateException: The content of the adapter has
> changed but ListView did not receive a notification. Make sure the
> content of your adapter is not modified from a background thread, but
> only from the UI thread. Make sure your adapter calls
> notifyDataSetChanged() when its content changes. [in
> ListView(16908298, class android.widget.ListView) with Adapter(class
> MyAdapter)]
谢谢!
编辑:我不刷新适配器从后台线程。 onNewItemReady()正在从AsyncTask的onProgressPublished中调用。
而不是'mAdapter.setData(MDATA);',你可能会考虑做一些像'mAdapter。addData(newItem);' –
此外,你是从UI线程还是后台线程调用'onNewItemReady'? –
从UI线程。 – Nek