Last active
August 29, 2015 14:26
-
-
Save brucetoo/a5747c47215dc1b988b1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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