前几天项目遇到一个需求,在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));