listView局部刷新是个比较常用的功能,比如下载进度更新,我把局部刷新原理封装成一个类;
实现原理:
(1)找到需要更新的item在adapter中的位置;
(2)更新adapter中item的数据data;
(3) 如果该item在listView当前屏的可见范围内,则拿到Item的ViewHolder更新控件内容,否则不需要更新,待下次adapter刷新全部时再刷新;
/**
* 局部刷新
* @author thduan
*
*/
public class PartialRefresh {
/** 无效位置 */
public static final int INVALID_POS = -1;
public interface IPartialRefreshListener {
/** 上层计算item在adapter中的诶之 */
int getItemPosInAdapter();
/** 上层更新item的数据 */
void onUpdateItemData(int itemPosInAdapter);
/**
* 上层局部更新viewholder,item在当前屏幕可见才需要更新viewholder,否则不更新
* @param posInListView :item 在listview的位置
*/
void onUpdateViewHolder(int posInListView);
/** 不需要更新 */
void noNeedU