【发布时间】:2011-11-14 06:14:56
【问题描述】:
我使用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();
}
}
【问题讨论】:
-
notifyDataSetChanged().. 应该这样做。你能发布一些代码吗..
-
我添加了代码 sn-p。希望对您有所帮助。
-
有人可以帮忙吗?
-
我出现这个问题的原因 - 我的
destroyItem()方法中有一个不正确的类(教程代码遗留下来的) - 所以视图永远不会被破坏。 -
当我刷新 viewpagers 数据时,前两个 view pager 没有刷新,其他 view pager 数据正在改变。请帮帮我
标签: android android-widget android-viewpager