我有一个10页的ViewPager。当我开始最后一个(第10个)页面时 onCreateView()
调用我片段的方法。当我滑到第9页 onCreateView()
也叫。但是当我回到第10页 onCreateView()
不叫。怎么了?
我有一个10页的ViewPager。当我开始最后一个(第10个)页面时 onCreateView()
调用我片段的方法。当我滑到第9页 onCreateView()
也叫。但是当我回到第10页 onCreateView()
不叫。怎么了?
尝试扩展FragmentStatePagerAdapter
这是因为FragmentPagerAdapter会在每个片段中保留内存。因此,当您第一次访问片段时,将调用onCreate,但Android将在内存中第二次查找,因此不需要调用onCreate。
如果您需要在每次显示片段时在OnCreate中运行代码,您应该将其移动到getItem(int id)
查看官方文档: http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
我有同样的问题,我的解决方案是再次分配ViewPager实例的适配器,就像:
pager.setAdapter(adapter);
这会导致从viewPager重新启动“mItems”属性并删除缓存。
但我不知道这是否是一个安全的解决方案
您可以从onPageSelect调用适配器getItem,也可以在滑动时调用它,并将代码放在getItem中,甚至放在onPageSeelect本身中。
没有什么是错的。该 ViewPager
已有页面,因此不需要创建它。
CommonWare的答案是最好的,并且像魅力一样:
简单的补充 OnPageChangeListener
到你的 ViewPager
项目,像这样:
ViewPager viewPager = null;
PagerAdapter pagerAdapter = null;
//Some code come here...
pagerAdapter = new PagerAdapter(); //Or any class derived from it
viewPager = (ViewPager)findViewById(R.id.container);//Connect it to XML
viewPager.setAdapter (mPagerAdapter); //Connect the two
//Next two lines are simply for fun...
//viewager.setPageTransformer(true, new DepthPageTransformer());
//viewPager.setPageTransformer(true, new PaymentZoomOutPageTransformer());
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//This is the right place to connect the pages with a data struct!!!
@Override
public void onPageSelected(int position) {
// Here you can connect the current displayed page with some data..
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//Here use the inflater to add views/pages
//Don't forget to do:
pagerAdapter.notifyDataSetChanged();
//When you're done...