當前,使用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