我有一个单独的线程来运行从互联网上获取数据.之后,我想通过调用adapter.notifyDataSetChanged()更新主线程中的ListView.但它不起作用.任何解决方法?谢谢.
Dam*_*ski 13
使用AsyncTask(http://developer.android.com/reference/android/os/AsyncTask.html).
在onPostExecute(...)方法中调用adapter.notifyDataSetChanged().
有关详细信息,请阅读:http://android-developers.blogspot.com/2009/05/painless-threading.html
Yar*_*Yar 12
总的来说,好的建议是 http://android-developers.blogspot.com/2009/05/painless-threading.html
我个人使用自定义线程(扩展线程的类),但通过Message发送响应给UI线程.所以在线程的run()函数中有:
Message msg;
msg = Message.obtain();
msg.what = MSG_IMG_SET;
mExtHandler.sendMessage(msg);
Run Code Online (Sandbox Code Playgroud)
UI线程定义了一个消息处理程序.
private Handler mImagesProgressHandler;
public void onCreate(Bundle bundle) {
mImagesProgressHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case LoadImagesThread.MSG_IMG_SET:
mArrayAdapter.setBitmapList(mImagesList);
mArrayAdapter.notifyDataSetChanged();
break;
case LoadImagesThread.MSG_ERROR:
break;
}
super.handleMessage(msg);
}
};
Run Code Online (Sandbox Code Playgroud)
这实际上比AsyncTask更容易.
或者,将消息发布到listview的消息队列(将在UI线程上执行):
list.post(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44683 次 |
| 最近记录: |