Viewpager在setAdapter调用上初始化片段实例的问题

时间:2019-06-18 13:52:43

标签: android android-fragments android-viewpager

我有一个片段(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的片段列表中则不实例化?

0 个答案:

没有答案