当前,使用FragmentActivity
,我使用以下代码在2种片段之间切换。FragmentPagerAdapter getItem未被触发
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
*我不喜欢使用FragmentStatePagerAdapter * - 嗯,你是否至少试图看看它是否有任何分歧? *因为在页面之间切换时潜在的更多开销的成本。* - 可能的开销是多少?你用两个片段发布的场景很简单。 – Luksprog 2013-03-23 14:59:37
@Luksprog 2个紫色和蓝色的颜色片段用于演示目的。真实案例片段比这更复杂。我知道我可以通过捆绑保存信息或保留实例片段技术来减少某些开销的扩展。然而,我认识到避免我的情况开销的最好方法是避免使用FragmentStatePagerAdapter。 – 2013-03-23 15:30:32