动态修改Listview中某一个item中的值

1,390 阅读1分钟

前几天项目遇到一个需求,在Listview中,每一个item都有点赞的需求,item中也有当前点赞的数量值,如果在某一个item中点赞之后,数量值要改变,并且点赞的图标会改变为已经点赞的状态,取消点赞也是一个道理。但是这个地方只涉及到其中的某一个item,用adapter.notifyDataSetChanged()就大材小用了,并且与我们的需求也不符。

好了,我们现在进入正题,直接上代码

 public void updateItemLadus(int position,int is_like,int count)
    {
        //firstVisiblePosition和lastVisiblePosition是当前屏幕上显示的第一个和最后一个item
        int firstVisiblePosition = listView.getFirstVisiblePosition() ;
        int lastVisiblePosition = listView.getLastVisiblePosition() ;
        //position是当前你所需要处理的item索引,
        if(position>=firstVisiblePosition && position<=lastVisiblePosition)
        {
            View view = listView.getChildAt(position - firstVisiblePosition) ;
            TextView like = (TextView) view.findViewById(R.id.item_feed_islike);
            TextView counts = (TextView) view.findViewById(R.id.lauds_num);
            if(is_like==0)
            {
            //is_like是服务器回传给我的值,0是没有关注,1是已经关注
                like.setCompoundDrawablesWithIntrinsicBounds(ContextCompat.getDrawable(getActivity(),R.mipmap.icon_dynamic_item_laduis),null,null,null);
                list.get(position).setIs_lauds(0);
            }else {
                like.setCompoundDrawablesWithIntrinsicBounds(ContextCompat.getDrawable(getActivity(),R.mipmap.icon_dynamic_item_laduised),null,null,null);
                list.get(position).setIs_lauds(1);
            }
            //count是服务器回传给我的当前item点赞总数值
            counts.setText(""+count);
            list.get(position).setLauds_num(String.valueOf(count));
        }
    }

最后有个地方需要注意的,那就是当我更新了这个item的点赞总数和点赞状态后,很多不小心的朋友都觉得已经结束了。最后一步还要刷新本地的List集合,否则修改完成后屏幕滚动回来数值加载的还是本地没有修改过的。

list.get(position).setIs_lauds(0); list.get(position).setIs_lauds(1); list.get(position).setLauds_num(String.valueOf(count));