一点击ListVIew就闪退,调试了两天了,好痛苦,望大家解救。
这是部分日志
*02-06 10:58:39.207: E/InputEventReceiver(764): Exception dispatching input event.
02-06 10:58:39.207: E/MessageQueue-JNI(764): Exception in MessageQueue callback: handleReceiveCallback
02-06 10:58:39.377: E/MessageQueue-JNI(764): 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. [in ListView(16908298, class android.widget.ListView) with Adapter(class android.widget.SimpleAdapter)]
02-06 10:58:39.377: E/MessageQueue-JNI(764): at android.widget.ListView.layoutChildren(ListView.java:1538)
部分代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clear);
bar = (ProgressBar) findViewById(R.id.progressBar0);
list = new ArrayList>();
SimpleAdapter adapter = new SimpleAdapter(this, list,
R.layout.list_view, new String[] { "name", "size", "path"},
new int[] { R.id.name, R.id.size, R.id.path });
setListAdapter(adapter);
System.out.println("hh");
handler = new MyHandler();
thread = new MyThread();
thread.start();
}
private void SendMessage(String name, String path, String size) {
Message message = handler.obtainMessage();
HashMap hashMap = new HashMap();
hashMap.put("name", name);
hashMap.put("path", path);
hashMap.put("size", size);
message.obj = hashMap;
handler.sendMessage(message);
}
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
HashMap<String, String> hashMap = (HashMap<String, String>) msg.obj;
list.add(hashMap);
}
}
模式错了,不能在线程内更改UI部分
已经提示了:
Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.
解决方法:
把线程内更新ui部分的内容提出来放到主线程里
然后在子线程内仅调用它即可
可把需要的参数传过来的
我也出现了上面的问题,我想知道,点击listView不算是修改UI吧,只是一个传值跳转的动作啊