我有一个包含10页的ViewPager。当我开始调用我的片段的最后一个(第10个)页onCreateView()
方法时。当我滑到第9页时,onCreateView()
也会被调用。但是当我回到第10页时onCreateView()
没有被调用。怎么了?
答案 0 :(得分:14)
尝试扩展FragmentStatePagerAdapter
答案 1 :(得分:2)
这是因为FragmentPagerAdapter会在每个片段中保留内存。因此,当您第一次访问片段时,将调用onCreate,但Android将在内存中第二次查找,因此不需要调用onCreate。
如果您需要在每次显示片段时运行OnCreate中的代码,您应该将其移动到getItem(int id)
请参阅官方文档:http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
答案 2 :(得分:2)
我有同样的问题,我的解决方案是再次分配ViewPager实例的适配器,就像:
pager.setAdapter(adapter);
这会导致从viewPager重新启动“mItems”属性并删除缓存。
但我不知道这是否是一个安全的解决方案
答案 3 :(得分:1)
没有错。 ViewPager
已经有了页面,因此无需创建它。
答案 4 :(得分:1)
您可以从onPageSelect调用适配器getItem,也可以在swipes上调用,并将代码放在getItem中,甚至放在onPageSeelect本身中。
答案 5 :(得分:0)
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...