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就是后话了。