我有一个片段(ParentFragment),该片段使用ViewPager实例通过扩展FragmentStatePagerAdapter的类遍历另一个片段(ChildFragment)的实例。当我为ViewPager设置适配器时,我遵循堆栈跟踪并发现实例化了ChildFragment的实例。
class ParentFragment
{
ViewPager v;
QuestionnaireViewPagerAdapter a;
onResume()
{
//Assuming the method works as intended. Just does a check of other class members without side effects
if (allowAdapterReload()){
questionnaireAdapter = setQuestionnaireViewPagerAdapter();
viewPager.setAdapter(questionnaireAdapter);
}
}
调用viewPager.setAdapter()
时,将调用QuestionnaireViewPagerAdapter类的getItem(int position)
方法,定义为:
@Override
public Fragment getItem(int position) {
Child childObject = mChildren.get(position);
return ChildFragment.newInstance(params);
}
这种行为让我有些困惑,因为即使之后迭代Viewpager,也会创建ChildFragment的新实例。这是一个性能问题,但此外,我还有一个不确定的错误处理方式。 ChildFragment包含呈现用户可以输入答案的ui组件的代码。对于特定的组件类型,将填充一个答案。我该如何修复viewpageradapter代码,使其仅在加载适配器时实例化子片段,而如果它已存在于viewpager的片段列表中则不实例化?