Skip to content

Instantly share code, notes, and snippets.

@brucetoo
Last active August 29, 2015 14:26
Show Gist options
  • Save brucetoo/a5747c47215dc1b988b1 to your computer and use it in GitHub Desktop.
Save brucetoo/a5747c47215dc1b988b1 to your computer and use it in GitHub Desktop.
adapter的getView方法,我们要进行单条刷新就要手动调用这个方法。
public View getView(int position, View convertView, ViewGroup parent)
那么这三个参数是如何确定的呢,第三个参数很好确定,就是你的listview。
为了确定另外两个参数position和converView,这里介绍几个lisView的新方法:
getFirstVisiblePosition(),该方法获取当前状态下list的第一个可见item的position。
getLastVisiblePosition(),该方法获取当前状态下list的最后一个可见item的position。
getItemAtPosition(int position),该方法返回当前状态下position位置上listView的convertView
我们通过从getFirstVisiblePosition的值到getLastVisiblePosition的值之间的listitem和需要进行更新的条件(比如id)进行比较确定哪一个是要更新的(如果不在当前可是范围内也就没有必要更新了,等list拉动的时候自然就会更新出来)
/**
* 通过ID刷新某个item
*/
private void updateSingleRow(ListView listView, long id) {
if (listView != null) {
int start = listView.getFirstVisiblePosition();
for (int i = start, j = listView.getLastVisiblePosition(); i <= j; i++)
if (id == ((Bean) listView.getItemAtPosition(i)).getId()) {
View view = listView.getChildAt(i - start);
getView(i, view, listView);
break;
}
}
}
RecyclerView单个Item刷新
使用:notifyItemChanged
RecyclerView不像ListView,只有一个更新notifyDataSetChanged,它不仅保留了ListView的更新特点,
还针对“增加,删除,更新”操作专门进行更新,可以只更新一个item,也可以更新一部分item,
所以,用起来效率更高。因此,RecyclerView的局部刷新,就可以通过修改数据源的方式,调用notifyItemChanged(position)即可
优化建议:如果单个item都很复杂,比如,item中需要从网络上加载图片等等。为了避免多次刷新照成的闪烁,我们可以在加载的时候,
为ImageView设置一个Tag,比如imageView.setTag(image_url),下一次再加载之前,首先获取Tag,比如imageUrl = imageView.getTag(),
如果此时的地址和之前的地址一样,我们就不需要加载了,如果不一样,再加载
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment