recycleview

RecyclerView中payload参数实现刷新一个item

2019-07-18  本文已影响47人  MengkZhang

最近项目中遇到在列表中点赞,刷新这个列表,item会闪动的问题。于是想到微信朋友圈点赞时,只是更新点赞的View,并不会重绘整个item,后来找到了RecyclerView局部刷新的notifyItemChanged(int position,Object payload)方法

RecyclerView局部刷新notifyItemChanged(int position,Object payload),payload相当于一个标记 只要不为空 可以实现具体刷新到一个item中的指定view

    /**
     * 根据 position 刷新某一个item
     *
     * @param position
     */
    public void notifySomeoneItem(int position) {
        //RecyclerView局部刷新notifyItemChanged(int position,Object payload),payload相当于一个标记 只要不为空 可以实现具体刷新到一个item中的指定view
        notifyItemChanged(position,"payload");
    }

重写adapter中的onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads)方法
局部刷新到item中指定view,必须重写该方法

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads) {
        HouseResViewHolder viewHolder = (HouseResViewHolder) holder;

        RecReadDataModel recommendedReadListModel = mList.get(position);
        if (recommendedReadListModel == null) return;

        if (payloads.isEmpty()) {     //正常绑定数据逻辑

            bindViewData(position, viewHolder, recommendedReadListModel);

        } else {                      //刷新一个指定item中的点赞view 而不是重新渲染这个item中的所有view 解决了点赞时item闪动问题

            //设置点赞状态
            setPraiseState(position, viewHolder, recommendedReadListModel);

        }


    }

如果payloads列表不是空的,你就可以在else代码块里面刷新你想更新的控件了(记得不需要更新的控件就不要写在这里了)。

项目时间紧,需求都搞不赢,来不及看源码。。。告辞

上一篇下一篇

猜你喜欢

热点阅读