目前,使用 FragmentActivity
,我使用以下代码在两种类型的片段之间进行切换。
private void toggle() {
Fragment oldFragment = getSupportFragmentManager().findFragmentById(R.id.content);
Fragment fragment = null;
if (oldFragment instanceof ColorFragment) {
fragment = new ViewPagerFragment();
} else {
fragment = new ColorFragment(android.R.color.black);
}
getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commitAllowingStateLoss();
}
正在切换2个片段。
- ColorFragment - 一个简单的片段,其背景填充为纯黑色。
- ViewPagerFragment - 一个包含
ViewPager
的片段。用户可以在紫色和蓝色的颜色片段之间滑动。
负责切换紫色和蓝色颜色片段的代码如下所示。
private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 2;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new ColorFragment(android.R.color.holo_purple);
default:
return new ColorFragment(android.R.color.holo_blue_bright);
}
}
}
然而,在切换过程中我遇到了奇怪的行为。
- 黑色片段被显示。
- 切换。
- 可以在紫色和蓝色片段之间滑动的视图分页器显示出来了。
- 切换。
- 黑色片段被显示。
- 切换。
- 什么都没有显示,因为MyFragmentPagerAdapter的getItem未被触发。
我认为我的情况类似于FragmentPagerAdapter getItem is not called
然而,由于在页面切换时可能会有更多的开销成本,我不想使用FragmentStatePagerAdapter
。
有什么解决此问题的方法吗?
我包括了一个完整可运行的源代码以演示这个问题:https://www.dropbox.com/s/jok9tz5ktvfcteo/viewpagerbug.zip