RecyclerView、ListView 局部刷新

RecyclerView局部更新
第一种:

recyclerView.post(new Runnable()
            {
                @Override
                public void run()
                {
                    if (mLinearLayoutManager != null)
                    {
                        //获取最后一个可见view的位置
                        int lastItemPosition = mLinearLayoutManager.findLastVisibleItemPosition();
                        //获取第一个可见view的位置
                        int firstItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
                        /**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/
                        if (position >= firstItemPosition && position <= lastItemPosition)
                        {
                            RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position);
                            updateFileStatusViewHolder(viewHolder, msgBaseBean);
                        }
                    }
                }
            });

第二种:
notifyItemChanged(); 有限制

ListView局部更新

/**
     * 第一种方法 更新对应view的内容
     *
     * @param position 要更新的位置
     */
    private void updateSingle(int position) {
        /**第一个可见的位置**/
        int firstVisiblePosition = listView.getFirstVisiblePosition();
        /**最后一个可见的位置**/
        int lastVisiblePosition = listView.getLastVisiblePosition();
        /**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/
        if (position >= firstVisiblePosition && position <= lastVisiblePosition) {
            /**获取指定位置view对象**/
            View view = listView.getChildAt(position - firstVisiblePosition);
            TextView textView = (TextView) view.findViewById(R.id.textView);
            textView.setText(datas.get(position));
        }
    }

https://blog.csdn.net/linglongxin24/article/details/53020164?ref=myread
https://blog.csdn.net/sinat_31057219/article/details/73476861
https://www.jianshu.com/p/907f84b5d559
https://www.jianshu.com/p/c5ca75d3a78c
https://www.jianshu.com/p/57e569087ffc
https://blog.csdn.net/zxt0601/article/details/52562770 【Android】RecyclerView的好伴侣:详解DiffUtil
https://www.jianshu.com/p/4eecf631b949 RecyclerView如何使用正确notifyItemRemoved
https://www.cnblogs.com/Fndroid/p/5789470.html Android开发学习之路-DiffUtil使用教程
https://blog.csdn.net/u014099894/article/details/51724223 Android 使用RecyclerView实现多列布局及其优劣,多行 多列

使用RecyclerView实现
主要依靠GridLayoutMananger和它的一个方法setSpanSizeLookup来实现。

/*
  传入所有列数的最小公倍数,1和4的最小公倍数为4,即意味着每一列将被分为4格
*/
GridLayoutManager gridLayoutManager = new GridLayoutManager(this.getContext(), 4);

//设置表格,根据position计算在该position处1列占几格数据
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
  @Override public int getSpanSize(int position) {
    //计算在哪个position时要显示1列数据,即columnCount / 1列 = 4格,即1列数据占满4格
    if (position == 0 || position == mTopGridData.size() + 1) {
      return 4;
    }

    //return 2即为columnCount / 2 = 2列,一格数据占2列,该行显示2列

    //1格1列,即改行有columnCount / 1 = 4列,该行显示4列
    return 1;
  }
});

recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setAdapter(new DoubleGridAdapter(getContext(), mTopGridData, mBottomGridList, this));//设置数据

使用RecyclerView
好处是仅用一个布局,减少了布局层次嵌套,有时候甚至可以把 完成 按钮也当做一列数据。
但是这种方式乍一看很简单,其复杂性体现在对数据的处理上和UI变化上。筛选器中必须要把当前选中的Holder回调出来,保存其数据并更新其UI。尤其在有全部选项时或者多选时。当列越多思路必须要越清晰。

https://blog.csdn.net/yearningseeker/article/details/79709802 recyclerView中GridLayoutManager实现每一行不同布局的问题
https://www.jianshu.com/p/675883c26ef2 RecyclerView通过GridLayoutManager实现多样式布局
https://www.jianshu.com/p/4af59d8aa9f3 android RecyclerView GridLayoutManager 多布局(每个Item带标题)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值