点击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");
}
...全文
781 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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();就行了
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,,,
内容概要:本文档聚焦于通信系统中的调制解调技术与Turbo码的结合应用,系统研究了GMSK调制的二比特差分解调方法,以及Turbo码分别与BPSK、GMSK调制方式联合使用的系统性能。通过Matlab平台实现了完整的通信链路仿真,涵盖信号调制、信道编码、解调解码及误码率分析等关键环节,深入探讨了不同调制体制下Turbo编码系统的抗干扰能力与频谱效率表现。研究不仅提供了算法实现代码,还包含了详细的性能对比分析,有助于理解现代数字通信中高效编码调制技术的设计原理与工程实现。此外,文档附带多个相关科研方向的仿真案例,展现出广泛的技术延展性与实际应用价值。; 适合人群:具备通信原理、数字信号处理等相关基础知识,熟悉Matlab编程环境,正在从事无线通信系统仿真、信道编码理论研究或相关领域科研工作的研究生、高校教师及工程技术研究人员。; 使用场景及目标:①深入掌握GMSK调制与Turbo码相结合的技术机制,理解其在提高通信可靠性与频谱利用率方面的优势;②熟练运用Matlab构建完整的数字通信仿真系统,完成从调制编码到解调译码的全流程建模与性能评估;③为无人机通信、卫星通信、移动通信等实际应用场景下的高可靠传输系统设计提供理论支持与算法参考。; 阅读建议:建议结合所提供的Matlab代码逐模块运行与调试,重点关注GMSK差分解调过程与Turbo译码的迭代收敛特性,同时可参考文档中列出的其他研究课题拓展仿真范围,提升综合科研与工程实践能力。

80,488

社区成员

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

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