ViewPager – 并不总是调用onCreateView

我有一个10页的ViewPager。 当我启动最后(第10)页onCreateView()我的片段的方法被调用。 当我滑动到第9页onCreateView()也被调用。 但是当我回到第十页onCreateView()没有被调用。 怎么了?

Solutions Collecting From Web of "ViewPager – 并不总是调用onCreateView"

尝试扩展FragmentStatePagerAdapter

这是因为FragmentPagerAdapter在内存中保存了每个片段。 因此,当你第一次访问片段时,onCreate会被调用,但第二次Android会在内存中寻找,所以不需要调用onCreate。

如果您需要在每次显示片段时在OnCreate中运行代码,则应将其移至getItem(int id)

请参阅官方文档: http : //developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html

您可以从onPageSelect调用适配器getItem,也可以在swipe上调用它,然后将代码置于getItem中,甚至放置在onPageSeelect本身中。

我有同样的问题,我的解决scheme是再次分配ViewPager实例的适配器,就像:

 pager.setAdapter(adapter); 

这会导致从viewPager重新启动“mItems”属性并删除caching。

但是我不知道这是否是一个安全的解决scheme

没有什么是错的。 ViewPager已经有了页面,所以不需要创build它。

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...