打怪的小兵 2018-04-19 10:03 采纳率: 33.3%
浏览 2583
已结题

RecyclerView的 ItemDecoration 如何实现更新

使用ItemDecoration 实现了你黏连头部效果,根据首字母实现分组,并滑动时会粘在头部,直到下一个组移动到上面才消失。
但是现在我在这个列表里增加了一个根据输入来筛选列表,但是黏连头部不能对筛选出来的数据作分组,一直显示的最原始的头部。
如下图片!原始列表图片说明
请问这种情况下怎么实现筛选后也能更新头部呢?
谢谢!

  • 写回答

1条回答 默认 最新

  • 打怪的小兵 2018-04-19 10:50
    关注

    不好意思,我自己调试出来了,这个应该是说我自己遗漏了。
    是这样的。
    1.因为在分割线MyDecoration类中写了对外接口,其中getGroupFirstLine 是获取分组中首字母的字母的。
    //对外接口
    public interface DecorationCallback {

        long getGroupId(int position);
    
        String getGroupFirstLine(int position);
    }
    

    2.在activity中有两个list , 一个list 是保存过滤的数据,另一个是保存所有的数据
    /* 用来保存过滤后的数据*/
    private List filterDateList;
    /*保存原始数据*/
    private List data = new ArrayList();

    3.然后再加载adapter中是加载data中的数据的,这种情况下是就是默认列表。
    但在输入字母过滤时,把数据add到filterDateList 列表中。虽然每次列表会根据输入的字符更新,但是因为在回调的中使用的数据list 为data,所以每次更新完后显示的黏连头部是以data数据为基础的,所以就一直显示有异常。

        mRecyleView.addItemDecoration(new MyDecoration(this, new MyDecoration.DecorationCallback() {
            @Override
            public long getGroupId(int position) {
    

    // Log.d("zhanfei_deco", "MyDecoration getGroupId: ");
    //
    if (null != filterDateList && !filterDateList.isEmpty()) {
    return Character.toUpperCase(filterDateList.get(position).getCountryName().charAt(0));
    } else {
    return Character.toUpperCase(data.get(position).getCountryName().charAt(0));
    }
    }

            @Override
            public String getGroupFirstLine(int position) {
                Log.d("zhanfei_deco", "MyDecoration getGroupFirstLine: data = " + data.size());
                if (null != filterDateList && !filterDateList.isEmpty()) {
                    return filterDateList.get(position).getCountryName().substring(0, 1).toUpperCase();
                } else {
                    return data.get(position).getCountryName().substring(0, 1).toUpperCase();
                }
            }
    

    谢谢!

    评论

报告相同问题?

悬赏问题

  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法