您的位置:首页 > 其它

viewpager删除item(数据源发生改变)没有即时更新

2016-10-12 19:41 330 查看
private class MyPagerAdapter extends PagerAdapter {

private ArrayList<HR_SCDevice> list;

public MyPagerAdapter(ArrayList<HR_SCDevice> list) {
this.list = list;
}

@Override
public int getItemPosition(Object object) {//TODO 这是重点继续研究
//return super.getItemPosition(object);//默认是不改变
return POSITION_NONE;//可以即时刷新看源码
}

@Override
public Object instantiateItem(ViewGroup container, final int position) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.item_head, null);
ImageView imageView = (ImageView) view.findViewById(R.id.iv_head);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
container.addView(view);
return view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}

@Override
public int getCount() {
return list.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
return (view == object);
}
}


我在更新的viewpager数据源的时候出现即使你删了item,viewpager的imagiew还是没有改变。

gobalLists.clear();
gobalLists.addAll(list);
gobalLists.addAll(authorInfos);
adapter.notifyDataSetChanged();


即使你重新更新集合的时候,notifychange()依然没有改变viewpager的数据。

Add / Delete pages to ViewPager dynamically。

用英文来googele搜索一般很准。

http://stackoverflow.com/questions/8060904/add-delete-pages-to-viewpager-dynamically

有一个答案很明显

First:override the pagerAdapter method “getItemPosition”

@Override

public int getItemPosition(Object object) {

return POSITION_NONE;

}

}

我们应该重写这个方法。。

直接ctrl 点击 super.getItemPosition(object)看源码

/**
* Called when the host view is attempting to determine if an item's position
* has changed. Returns {@link #POSITION_UNCHANGED} if the position of the given
* item has not changed or {@link #POSITION_NONE} if the item is no longer present
* in the adapter.
*
* <p>The default implementation assumes that items will never
* change position and always returns {@link #POSITION_UNCHANGED}.
*
* @param object Object representing an item, previously returned by a call to
*               {@link #instantiateItem(View, int)}.
* @return object's new position index from [0, {@link #getCount()}),
*         {@link #POSITION_UNCHANGED} if the object's position has not changed,
*         or {@link #POSITION_NONE} if the item is no longer present.
*/
public int getItemPosition(Object object) {
return POSITION_UNCHANGED;
}


大意就是默认是positon没有改变。即使你删了list中的一个item。改成#POSITION_NONE之后会更新不存在的data。当然配合使用选中当前位置 setcurrentitem更爽。。选中的position—1就是后话了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐