Android_List局部刷新某一个item

需求以点赞为例子只刷新点赞的数量并将点赞的哪一个设置为黑色,因为直接用adapter的notifyDataSetChanged 会全部刷新
需要浪费时间 而且图片重新加载会导致闪烁,造成不好的用户体验感

核心代码

public  void updateItem(ListView listView, BBS bbs) {
        if (listView != null) {
            int start = listView.getFirstVisiblePosition();
            for (int i = start, j = listView.getLastVisiblePosition(); i <= j; i++)
                if (bbs.getId() == ((BBS) listView.getItemAtPosition(i)).getId()) {
                    View view = listView.getChildAt(i - start);
                    //getView(i, view, listView);
                    //想办法拿到holdler 我这边是框架直接拿到holder
                    ViewHolder viewHolder = ViewHolder.getViewHolder(view);
                    
                    //点赞数 想办法拿到holder的点赞数的组件 我这里也是因为框架所以这样
                    TextView textLikeNum = viewHolder.getTextView(R.id.text_like_num);
                      //点赞的图的 想办法拿到holder的点赞的图组件 我这里也是因为框架所以这样 
                    ImageView imgLike = viewHolder.getImageView(R.id.img_like);

                    if (bbs.getPraised() == 1) {//服务器返回如果某个字段为1 就是自己已经点赞 设置背景和颜色
                        Log.i("执行了", "getPraised: ");
                        imgLike.setImageResource(R.mipmap.ic_like_select);
                        textLikeNum.setTextColor(context.getResources().getColor(R.color.color_232427));
                        textLikeNum.setText(bbs.getPraisedCount()+"");
                    } else if (bbs.getPraised() == 0) {
                        Log.i("执行了", "getPraised: ");
                        imgLike.setImageResource(R.mipmap.ic_like_normal);
                        textLikeNum.setTextColor(context.getResources().getColor(R.color.color_e1e8eb));
                        textLikeNum.setText(bbs.getPraisedCount()+"");
                    }

                    // getView(i, view, listView);  //直接执行
                    break;
                }
        }
    }

调用代码
请求完网络 从事件总线框架拿到新的praise和bbs
BBS bbs = (BBS) event.getBbs();
Praise praise = event.getPraise();
int i = bbsAdapter.data.indexOf(bbs);
BBS mybbs = (BBS) bbsAdapter.data.get(i);
//重新设置点赞
mybbs.setPraised(praise.getPraised());
mybbs.setPraisedCount(praise.getAmount());
bbsAdapter.updateItem(listBbs,bbs);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值