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就是后话了。
相关文章推荐
- viewpager删除item后没有更新
- winform datagridview 不显示默认第一列 不显示未绑定列 数据源发生改变时自动更新 (转)
- winform datagridview 不显示默认第一列 不显示未绑定列 数据源发生改变时自动更新
- 关于Viewpager删除其中数据后不更新界面?
- 解剖angularjs在代码中改变了 model 的值,view 却没有更新原因
- vue 数组元素(data)发生改变没有跟新到(view)解决方法
- viewpager fragment FragmentStatePagerAdapter数据删除后更新界面
- viewPager+fragment实现分页切换,跳转至别的页面改变数据,fragment没有改变
- ViewPager嵌套RecycleView(Fragment作为数据源)来展示10条数据,每个Item显示的内容是(Android软件开发工程师)(用自定义的Adapter 实现
- 使用Fragment作为Item的ViewPager不更新问题.
- RecyclerView使用,RecyclerView使用,增加一个item,删除一个item,更新数据,item点击事件
- viewPager+fragment实现分页切换,跳转至别的页面改变数据,fragment没有改变
- 添加或删除RecyclerView的item后 刷新Adapter中的数据源的个数
- angularjs在代码中改变了 model 的值,view 却没有更新
- DataGridView绑定数据源后,在界面上删除行,数据源没有改变
- viewpager动态改变每一个item的高度
- 关于viewpager动态删除fragment更新的问题
- tableView 数据源修改后,reloaddata数据没有更新
- ViewPager嵌套Fragment实现item实时更新的两种方式
- 在onTabSelected里面调用viewPager.setCurrentItem方法发生java.lang.NullPointerException错误