好的,我会尝试尽可能清楚地说明这一点。我有一个名为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);
答案 0 :(得分:0)
我觉得很愚蠢,但我发现了问题所在。在我的CheckerFragment中,我会调用getArguments()来检索String extra,我会用它来确定如何布局片段。问题是我使这个额外成为CheckerFragment的静态成员。因此,每次创建新片段时,都会使用最新的片段。
故事的道德 - 如果您计划制作该片段的多个实例,请不要让您的片段成为静态成员。