ViewPager – 并不总是调用onCreateView

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

  • 带有WebView的ViewPager允许轻扫和禁止滚动WebView
  • 屏幕方向更改后,从ViewPager的适配器中销毁项目
  • 如何在视图寻呼机中find“最后一页”。 或视图的总“数量”。 Android开发
  • 使用viewpager折叠工具栏布局
  • Android ViewPager和TabLayout工作不快
  • 查看寻呼机和片段生命周期
  • Viewpager在导航回片段时没有得到更新
  • Android ViewPager在设置当前项目/页面时抛出IndexOutOfBoundsexception
  • 尝试扩展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...