Android_List局部刷新某一个item

来源:互联网 发布:动作特效软件 编辑:程序博客网 时间:2024/06/05 04:10

需求以点赞为例子只刷新点赞的数量并将点赞的哪一个设置为黑色,因为直接用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和bbsBBS 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);