夨坕write 2022-11-21 19:50 采纳率: 12.5%
浏览 14
已结题

适配器的内容已更改但ListView未收到通知

我在做android开发,遇到了这样的一个问题:在调接口获取数据后,我使用了Handler对Adapter进行更新,偶尔会出现闪退问题,闪退问题是说:
java.lang.IllegalStateException:适配器的内容已更改但ListView未收到通知.确保不从后台线程修改适配器的内容,而只是从UI线程修改.[在ListView(2131034188,类android.widget.ListView)中使用Adapter(类.MainActivity $ ListAdapter)]
在网上也看了很多,没有能解决掉这个问题,不知道有没有哪位伙伴能帮忙下,谢谢!
代码结构大概如下:

private String mHandler;
private MyAdapter adapter;

Handler handler = new Hanlder(){
      switch(msg.what){
          case 1:
            adapter.notifydatasetchanged();
            break;
    }
}  

private void getList(){
   boolean flag  = api;  //调用api的方法返回值是true还是false,true接口会返回数据,false会返回错误的提示
  if(flag){
    Message msg= new Message();
    msg.what = 1;
    mHandler.sendMessage(msg);
  }
}


private class MyAdapter extends BaseAdapter{
 
}  

以上只是一个简单的结构,伙伴们不要较真代码,列表调用getList()方法,在方法里调用api接口获取数据,得到的数据通过hanlder进行适配器的更新 adapter.notifydatasetchanged();偶尔会出现我上述所说的闪退,【别问有没有初始化,初始化都在create方法里】

  • 写回答

3条回答 默认 最新

  • 立青_ 2022-11-21 20:12
    关注

    你数据是在哪修改的?从你贴的代码中只能看到你在handler 中调用notifydatasetchanged,没看到哪修改数据的啊。是不是在子线程里修改的数据?f放到ui线程更改数据试试

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月8日
  • 修改了问题 11月22日
  • 修改了问题 11月21日
  • 创建了问题 11月21日