点击ListView闪退

android砖家 2014-02-06 08:42:07
一点击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,只是用Handler往ArrayList添加东西,Adapter是在主线程生成和设置的。



添加下面这些代码,点击ListView时打印不出“Click”,直接退出了。

protected void onListItemClick(ListView l, View v, int position, long id) {
System.out.println("Click");
}
...全文
614 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dghjkoll 2016-04-27
  • 打赏
  • 举报
回复
同样遇到这个问题,楼主解决了吗?
D_Why 2014-12-29
  • 打赏
  • 举报
回复
引用 8 楼 u012617697 的回复:
楼主问题解决木有,求指导
这个你搞定没?我也碰到了,找到问题所在了:1.就是在你的list.clear()以后没有adapter.notifyDataSetChanged(); 2.就是确保setadapter的值是在此类里面public MyAdapter(Context context,ArrayList<ShowParams> sList){ super(); this.context=context; this.sList=(ArrayList<ShowParams>) sList.clone(); this.inf=LayoutInflater.from(context); } 也就是将this.sList=sList;改为this.sList=(ArrayList<ShowParams>) sList.clone();就行了
长离Yu 2014-10-10
  • 打赏
  • 举报
回复
楼主问题解决木有,求指导
android砖家 2014-02-08
  • 打赏
  • 举报
回复
引用 3 楼 pengguohua1988 的回复:
The content of the adapter has changed but ListView did not receive a notification 你的adapter没有刷新 class MyHandler extends Handler { @Override public void handleMessage(Message msg) { HashMap<String, String> hashMap = (HashMap<String, String>) msg.obj; list.add(hashMap); 这里加上adapter.notifyDataSetChanged(); }
我查资料时别人也是这样说,但加上这句后报空指针异常(就单单加这一句,其它什么都没改),求指教。
MR__P 2014-02-08
  • 打赏
  • 举报
回复
引用 5 楼 u013241311 的回复:
[quote=引用 3 楼 pengguohua1988 的回复:] The content of the adapter has changed but ListView did not receive a notification 你的adapter没有刷新 class MyHandler extends Handler { @Override public void handleMessage(Message msg) { HashMap<String, String> hashMap = (HashMap<String, String>) msg.obj; list.add(hashMap); 这里加上adapter.notifyDataSetChanged(); }
我查资料时别人也是这样说,但加上这句后报空指针异常(就单单加这一句,其它什么都没改),求指教。[/quote] QQ1519203524
MR__P 2014-02-08
  • 打赏
  • 举报
回复
引用 5 楼 u013241311 的回复:
[quote=引用 3 楼 pengguohua1988 的回复:] The content of the adapter has changed but ListView did not receive a notification 你的adapter没有刷新 class MyHandler extends Handler { @Override public void handleMessage(Message msg) { HashMap<String, String> hashMap = (HashMap<String, String>) msg.obj; list.add(hashMap); 这里加上adapter.notifyDataSetChanged(); }
我查资料时别人也是这样说,但加上这句后报空指针异常(就单单加这一句,其它什么都没改),求指教。[/quote] 你这个是demo吗?发给我给你调调
MR__P 2014-02-07
  • 打赏
  • 举报
回复
还有你的代码的质量不太好, thread = new MyThread(); thread.start();这个有什么用。 public void handleMessage(Message msg) { 这里面最好用switch(msg.what)判断一下 } 调用handler.sendE...
MR__P 2014-02-07
  • 打赏
  • 举报
回复
The content of the adapter has changed but ListView did not receive a notification 你的adapter没有刷新 class MyHandler extends Handler { @Override public void handleMessage(Message msg) { HashMap<String, String> hashMap = (HashMap<String, String>) msg.obj; list.add(hashMap); 这里加上adapter.notifyDataSetChanged(); }
zx9009 2014-02-07
  • 打赏
  • 举报
回复
添加数据后adapter.notifyDataSetChanged();
哎,真难 2014-02-07
  • 打赏
  • 举报
回复
报错的意思是说你的加载的SimpleAdapter有问题,不然你自己写一个adatper不要去继承已经提供的SimpleAdapter,,,

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧