現在、 をFragmentActivity
使用して、次のコードを使用して 2 種類のフラグメントを切り替えます。
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 が呼び出されていないに似ていると思います
ただし、ページを切り替えるときにオーバーヘッドが増える可能性があるFragmentStatePagerAdapter
ため、を使用しないことを好みます。
この問題を克服するための回避策はありますか?
この問題を示すために、完全に実行可能なソース コードを含めます: https://www.dropbox.com/s/jok9tz5ktvfcteo/viewpagerbug.zip