在Fragment

时间:2015-07-09 17:03:16

标签: android android-fragments android-viewpager fragmentpageradapter android-nested-fragment

好的,我会尝试尽可能清楚地说明这一点。我有一个名为CheckerManager的片段,它包含一个ViewPager。此ViewPager将允许用户在3个片段之间滑动,所有片段都是另一个名为CheckerFragment的片段的实例。我使用FragmentPagerAdapter来处理分页。这是它的外观

private class PagerAdapter extends FragmentPagerAdapter {
    CharSequence mTabTitles[];

    public PagerAdapter(FragmentManager fm, CharSequence tabTitles[]) {
        super(fm);
        mTabTitles = tabTitles;
    }

    @Override
    public Fragment getItem(int position) {
        switch(position) {
            case 0:
                return CheckerFragment.newInstance(MainFragment.DRAW_TITLE_LOTTO);
            case 1:
                return CheckerFragment.newInstance(MainFragment.DRAW_TITLE_DAILY);
            case 2:
                return CheckerFragment.newInstance(MainFragment.DRAW_TITLE_EURO);
            default:
                return null;
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mTabTitles[position];
    }

    @Override
    public int getCount() {
        return 3;
    }
}

我知道ViewPager将始终在当前片段的任一侧创建片段。所以说我的3个CheckerFragments被称为A,B和C,当前的片段是A.已经创建了B.但我的问题是,即使我仍然在看片段A,片段B是活跃的'分段。我创建的每个输入实际上都对应于片段B而不是A.活动片段始终是ViewPager最后创建的片段。

我看过很多事情,看看是否有人遇到过同样的问题,但我发现很难描述出错是什么。我认为所有的ViewPagers片段属于同一类型,即CheckerFragment,这是事实。我在应用程序的其他地方的片段内部有一个ViewPager的工作实现,我唯一的区别是每个页面都是不同类型的片段。

任何帮助将不胜感激!

*编辑

PagerAdapter adapter = new PagerAdapter(getChildFragmentManager(), tabTitles);
    ViewPager viewPager = (ViewPager)view.findViewById(R.id.viewPagerChecker);
    viewPager.setAdapter(adapter);

1 个答案:

答案 0 :(得分:0)

我觉得很愚蠢,但我发现了问题所在。在我的CheckerFragment中,我会调用getArguments()来检索String extra,我会用它来确定如何布局片段。问题是我使这个额外成为CheckerFragment的静态成员。因此,每次创建新片段时,都会使用最新的片段。

故事的道德 - 如果您计划制作该片段的多个实例,请不要让您的片段成为静态成员。