如何强制ViewPager重新实例化其项目
我正在使用ViewPager
来允许用户在其视图之间滑动。 有没有办法如何强制这个ViewPager
重新加载/重新实例化的意见,如果他们不再有效或需要刷新? 我试图在其适配器上调用notifyDataSetChanged()
,但是这不会再调用instantiateItem()
方法。
编辑
这里是从ViewPager及其适配器定义扩展的类。 Bellow是我想强制刷新项目时调用的refresh()
方法。
public class DayFlipper extends ViewPager { public class FlipperAdapter extends PagerAdapter { @Override public int getCount() { return DayFlipper.DAY_HISTORY; } @Override public void startUpdate(View container) { } @Override public Object instantiateItem(View container, int position) { Log.d(TAG, "instantiateItem(): " + position); Date d = DateHelper.getBot(); for (int i = 0; i < position; i++) { d = DateHelper.getTomorrow(d); } d = DateHelper.normalize(d); CubbiesView cv = new CubbiesView(mContext); cv.setLifeDate(d); ((ViewPager) container).addView(cv, 0); // add map cv.setCubbieMap(mMap); cv.initEntries(d); return cv; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView((CubbiesView) object); } @Override public void finishUpdate(View container) { } @Override public boolean isViewFromObject(View view, Object object) { return view == ((CubbiesView) object); } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } } ... public void refresh() { getAdapter().notifyDataSetChanged(); } }
有同样的问题。 对我来说,它打电话
viewPage.setAdapter( adapter );
这再次导致了页面的重新实现。
我find了一个解决scheme。 这只是解决我的问题,但目前唯一的解决scheme。
ViewPager PagerAdapter不更新视图
public int getItemPosition(Object object) { return POSITION_NONE; }
有谁知道这是否是一个错误?
public class DayFlipper extends ViewPager { private Flipperadapter adapter; public class FlipperAdapter extends PagerAdapter { @Override public int getCount() { return DayFlipper.DAY_HISTORY; } @Override public void startUpdate(View container) { } @Override public Object instantiateItem(View container, int position) { Log.d(TAG, "instantiateItem(): " + position); Date d = DateHelper.getBot(); for (int i = 0; i < position; i++) { d = DateHelper.getTomorrow(d); } d = DateHelper.normalize(d); CubbiesView cv = new CubbiesView(mContext); cv.setLifeDate(d); ((ViewPager) container).addView(cv, 0); // add map cv.setCubbieMap(mMap); cv.initEntries(d); adpter = FlipperAdapter.this; return cv; } @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView((CubbiesView) object); } @Override public void finishUpdate(View container) { } @Override public boolean isViewFromObject(View view, Object object) { return view == ((CubbiesView) object); } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } } ... public void refresh() { adapter().notifyDataSetChanged(); } }
尝试这个。