问题是由FragmentStatePagerAdapter驱动的2级嵌套ViewPagers?

时间:2015-04-17 20:30:51

标签: android android-viewpager fragmentstatepageradapter

在Android应用程序中,我有一个动态viewPager,可能会显示一个动态数量的片段(片段编号在实例化之前是固定的)。 这个viewPager由4个(固定数量)的subViewPager组成。每个subViewPager都可以容纳1-5个片段。这意味着片段的整个计数最多可以达到20项。

对于Info:片段可以只是一组字段,直到画布驱动的视图,用户与触摸交互,添加了位图显示

我尝试使用FragmentPagerAdapter(用于主视图和子视图)进行第一次实现,它工作正常,但需要大量内存(120 MB分配的堆内存)

我现在正在使用FragmentStatePagerAdater来减少内存分配

我的问题是,在mainViewPager的Fragment中处理的subViewPager可能会被导航杀死(这是statepageradapter为释放内存所期望的)(它们在OnCreateView中初始化)。

=>关键是我需要该对象能够使用按钮滑动:

为了传递给下一个片段,我需要访问mainViewPager,然后访问mainViewPager当前项的subViewPager,以包含当前可见的片段。

问题是subViewPager的保留片段可能被杀死,因此viewPager为null。 在哪里以及如何处理subviewpager以启用访问subviewpager PLUS可以通过杀死不可见的片段来释放内存。

以下是代码部分:

public class MySubViewPagerFragment extends Fragment {

    private MySubFragmentPagerStateAdapter mSubPagerStateAdapter;
    private ViewPager mPagerSub;
    private TitlePageIndicator mIndicatorSub;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.vp_sub, container, false);

        int id = getArguments().getInt("id");

        // Creation de l'adapter
        mSubPagerStateAdapter = new MySubFragmentPagerStateAdapter(getChildFragmentManager(), ((MainActivity) getActivity()).getConfigList().get(id));
        // Creation du Pager
        mPagerSub = (ViewPager) v.findViewById(R.id.vp_sub);
        // Affectation de l'adapter au ViewPager
        mPagerSub.setAdapter(this.mSubPagerStateAdapter);

        TitlePageIndicator indicator = (TitlePageIndicator) v.findViewById(R.id.tpi_sub);
        indicator.setViewPager(mPagerSub);
        mIndicatorSub = indicator;
        return v;
    }

    public boolean swipNextFragment() {
        boolean result = false;
        int c = mPagerSub.getCurrentItem();
        if (c < (mPagerSub.getAdapter().getCount() - 1)) {
            result = true;
            new Handler().post(new Runnable() {
                @Override
                public void run() {
                    mPagerSub.setCurrentItem(mPagerSub.getCurrentItem() + 1);
                }
            });

        }
        return result;
    }
}

我试图将subViewPager放在活动级别,但没有解决任何问题。

您是否有任何共同使用案例/解决方案或建议?

这是一个具有相同架构的示例项目。 https://github.com/afaucogney/NestedAndroidViewPagers

PS:如果你看到一些优惠,请随时向我推荐其他优化建议。

0 个答案:

没有答案