Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewPager和自定义适配器_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android ViewPager和自定义适配器

Android ViewPager和自定义适配器,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我已经设置了一个带有自定义适配器的ViewPager。该适配器缓存它显示的片段。代码如下所示: @Override public Fragment getItem(int position) { Fragment f = getCachedFragment(position); if (f == null) { //create and add fragment to cachedFragments } System.out.println("ge

我已经设置了一个带有自定义适配器的ViewPager。该适配器缓存它显示的片段。代码如下所示:

@Override
public Fragment getItem(int position) {
    Fragment f = getCachedFragment(position);
    if (f == null) {
        //create and add fragment to cachedFragments
    }
    System.out.println("getItem: Fragment named:" + mTabs.get(position).clss.getSimpleName() + " with Hash " + f.hashCode());
    return f;
}
一切正常。除了片段显示的初始片段似乎不是使用getItem方法创建的

我已经验证了两种不同类型的片段正在启动,一种是使用getItem方法,另一种是以我无法解释的神奇方式启动的。问题是,正确创建的视图并不是所显示的片段,因此尝试访问它并在其上操作视图将失败,因为从来没有调用过onCreateView

正如您所看到的,创建或检索的每个片段都用相应的hashCode记录在chat中。除此之外,我还添加了另一个system.out,它告诉我有关片段的新实例

现在,当我在ViewPager的索引0上时,也会加载索引1的片段,但不使用getItem。我的问题是,索引1的片段是如何启动的?我查看了ViewPagerAdapter文档,但它没有提供任何解决方案,因为它只是说它使用getItem来获取相应的项


任何指向正确方向的指针都将不胜感激。

您不想在第1页加载第二页吗?我确实想加载它,但我想知道它是如何加载的,因为它不使用getItem方法,哪个应该是视图检索其碎片的正确方法我认为应该使用FragmentStatePagerAdapter。此适配器自动缓存其中所有过去可见的片段,并且仅显示可见片段及其左右兄弟。要澄清这一点,请单击“确定”。问题不在于适配器缓存片段,问题在于显然使用InstanceItemViewGroup容器int position来创建对象。所以我只是推翻了这个方法,提供了我自己的方法。但是如果我只是使用getItem方法,viewpager根本不会显示任何内容。