• Android 关于ExpandableListView刷新的解决办法


    正文

    首先是最基础的

    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);
  • 相关阅读:
    .NET 第一天
    C# 多线程操作同一文件
    c# 进制转换-续
    C# 进制转化
    DevExpress.Utils.ToolTipLocation
    gridView 练习
    dashboard 数据绑定的时候 addTable 是视图
    gridLookUpEdit1
    gridview1 设置 内容居中 标题剧中
    LOOKupE
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6143852.html
Copyright © 2020-2023  润新知