我有一个非常简单的 PagerAdapter,出于某种原因,它删除了位置 0 的 View 并 1 当它滚动到位置 2 时。
具体来说,当我第一次运行应用程序时,有 3 个 View 。我滚动到位置 2,位置 1 的 View 将消失。 View 0 仍然存在。如果我滚动到 View 0 并返回到 View 2,然后再次返回到 View 0,则 View 0 会突然消失。我再次这样做,我实际上可以看到 View 0 被实例化并立即被销毁。
这是怎么回事?
主要 Activity
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final MyPagerAdapter adapter = new MyPagerAdapter(this);
final ViewPager myPager = (ViewPager) findViewById(R.id.mypanelpager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(1);
}
public class MyPagerAdapter extends PagerAdapter {
private Context ctx;
Calendar c = Calendar.getInstance();
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
ViewGroup collection;
public MyPagerAdapter (Context ctx){
this.ctx = ctx ;
}
@Override
public int getCount() {
return 3;
}
public Object instantiateItem(ViewGroup container, int position ){
this.collection = (ViewPager)container;
NewMonth monthObject = new NewMonth(ctx, month+position-1,2012);
View monthLayout = monthObject.newParentLayout;
collection.addView(monthLayout);
return monthLayout;
return addViewAt(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
collection.removeViewAt(position);
}
@Override
public Parcelable saveState() {
return null;
}
@Override
public boolean isViewFromObject(View view, Object arg1) {
return view==arg1;
}
}
最佳答案
您必须在内存中维护所有选项卡,将 OffscreenPageLimit 指定为 N-1,在您的情况下将其放在 onCreate 方法中:
myPager.setOffscreenPageLimit(2);
关于android - 为什么在位置 ==2 时调用 destroyItem? android pagerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12539961/