我们都知道,更新listview通常调用修改adapter的数据源,然后调用adapter的notifyDataSetChanged();
但是有时候只是需要更新某一个指定的item,比如微信聊天应用中。这个时候,我们不需要去调用Adapter的notifyDataSetChanged()方法。可以写一个updateItem(int position)的方法去更新指定项,这样代价就会小一些。
那么我们怎么拿到这个item然后去更新它的数据呢,其实listview提供了getChildAt(int index)方法让我们去获取,这个方法其实是ViewGroup的方法。并且由于一般使用了ViewHolder缓存机制,所以我们获取子item的时候要注意在可见区域的position去获取。
public void updataItem(int position) {
int firstVisiblePos = listView.getFirstVisiblePosition();
int lastVisibalePos = listView.getLastVisiblePosition();
if (position >= firstVisiblePos && position <= lastVisibalePos) {
View view = listView.getChildAt(position - firstVisiblePos);
ViewHolder viewHolder = (ViewHolder) view.getTag();
//然后使用viewholder去更新需要更新的view。
//TextView textView = (TextView) viewHolder.findViewById(R.id.textView);
//textView.setText("11111");
}
}