zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    valgrind试用笔记
    《c++ primer》3.5 array 小结
    《c++ primer》chap8 The IO library 小结
    《c++ primer》3.4 迭代器(iterator)
    《c++ primer》3.1 声明命名空间 小结
    c++ 流格式控制符
    《c++ primer》3.3 vector 类型小结
    《c++ primer》3.2 string 小结
    Ubuntu 管理相关小知识(不定期更新)
    shell 脚本 生成文件,文件名为日期时间
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6143852.html
Copyright © 2011-2022 走看看