欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 关于ExpandableListView刷新问题的解决方法

程序员文章站 2024-02-24 18:25:22
正文 首先是最基础的 expandablelistview vlist = (expandablelistview) this.findviewbyid(r.i...

正文

首先是最基础的

expandablelistview vlist = (expandablelistview) this.findviewbyid(r.id.list);
elistadapter adapter = new elistadapter(getapplicationcontext(), list); //list 是数据源
vlist.setadapter(adapter);

//适配器就不写了, 都懂的
class elistadapter extends baseexpandablelistadapter {}

一般情况下, listview是使用notifydatasetchanged() 更新的

adapter.notifydatasetchanged();

expandablelistview 也是listview, 估计这样是可以的.
 
可惜现在用的不是listview, 而是expandablelistview! 所以报错了0. 0

java.lang.classcastexception: android.widget.expandablelistconnector

在google 找了资料, 发现是很多都犯这个错误. 解决方法也蛮简单的!

class elistadapter extends baseexpandablelistadapter {
  public elistadapter(context context, list<t> list) {
    this.list = list;
    this.context = context;
    handler = new handler(){

      @override
      public void handlemessage(message msg) {
       notifydatasetchanged();
       super.handlemessage(msg);
      }
    };
  }
  
  public void refresh() {
    handler.sendmessage(new message());
  }
}

只要我们调用refresh() 方法就可以使用notifydatasetchanged() 了.

可是!! 只有groupview 更新!!

childview 没有更新! 惨了....要更新的在childview!!

继续靠google 娘! 大家都提供很多方法, 有一个人说, 直接在list 添加item 再更新就可以了!

我试了一下,没有任何效果.......

查了一查sdk 文档, 发现group 的伸缩会引起getchildview(int, int, boolean, view, viewgroup)  的运行!

所以刷新的childview 的方法很简单.

只有伸缩一次就可以了! 连adapter 都不用重写! 简单吧?

vlist.collapsegroup(groupposition);
vlist.expandgroup(groupposition);

以上就是小编为大家带来的android 关于expandablelistview刷新问题的解决方法全部内容了,希望大家多多支持~