我已经使用自定义适配器设置了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()
方法创建的。
我已经确认正在启动2种不同类型的片段,一种采用getItem()
方法,另一种采用神奇的方式,我无法解释。问题是正确创建的一个不是正在显示的片段,因此尝试访问它并操纵它上面的视图将失败,因为onCreateView()
从未被调用过。
如您所见,创建或检索的每个片段都记录在与相应hashCode的聊天中。除此之外,我还添加了另一个system.out
,它告诉我片段的新实例。
现在,当我在ViewPager的索引0上时,也会加载索引1的片段,但不会使用getItem()
。我的问题是,索引1的片段是如何启动的?我检查了ViewPagerAdapter文档,但它没有提供任何类型的解决方案,因为它只是说它使用getItem()
来获取相应的项目。
非常感谢任何指向正确方向的指针。