情形
不使用RecycleView,实现ListView的单项的刷新,而不去刷新整个列表。
实现
通过ListView.getChildAt()方法,获取到item的View,然后进行数据刷新。
这里注意getChildAt()中的position是展示界面的位置,不是整个ListView的位置。
/**
* 更新单个Item UI
*
* @param itemIndex 位置
* @author fengzhen
* @version v1.0, 2017/6/5 17:41
*/
public void updateProgress(int itemIndex) {
// 获取可视列表第一个Item的位置
int visiblePosition = mListView.getFirstVisiblePosition();
// 获取可视列表最后一个Item的位置
int lastVisiblePosition = mListView.getLastVisiblePosition();
// 判断将更新的Item 处于视野范围内,
// 否则不用进行更新,只需要处理数据源
if (visiblePosition <= itemIndex && itemIndex <= lastVisiblePosition) {
// 必须获取可视界面的Item
View view = mListView.getChildAt(itemIndex - visiblePosition);
// 还未加载到的item不能修改
if (view == null) return;
// 获取Item绑定的ViewHolder
ViewHolder holder = null;
Object tag = childAt.getTag();
if (tag instanceof ReleaseListAdapter.ViewHolder) {
holder = (ViewHolder) tag;
} else {
return;
}
// 更新Item的UI位置
...
}
}
如此,便可以实现ListView的单项刷新。