目前,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