私の Android アプリにはアクティビティが 1 つしかなく、すべてのフラグメントが 1 つのフレームレイアウトで追加または置換されます。
問題は、フラグメント バックスタックに 2 つの異なるビューページャーがあり、アクティビティが再作成されたときに、2 番目のビューページャーが最初のビューページャーとして表示されることです。
以下は、フラグメントを発生順にバックスタックに追加する方法です。3 は、アクティビティが再作成された後に発生するフラグメントです。
- setupPlacesEventMainView()、これは FragmentStatePagerAdapter を使用するビューページャーです (アクティビティが再作成された後に適切に表示されます)
- setupPlaceDetailViewPager、これは FragmentStatePagerAdapter を使用するビューページャーです。(問題: PlacesEventMainViewPager が PlaceDetailViewPager の代わりにここに表示されます。この問題は、EventSpecials に移動しなくても発生します)
- setupEventSpecials()、これはリストフラグメントです。(アクティビティが再作成された後、適切に表示されます)
PlacesEventMainViewPager をバックスタックに追加する
public void setupPlacesEventMainView()
{
clearBackStack();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
PlacesEventMainViewPager placesEventMainViewPager = new PlacesEventMainViewPager();
transaction.replace(R.id.fragment_container, placesEventMainViewPager, PlacesEventMainViewPager.class.getSimpleName());
transaction.commit();
}
バックスタックに PlaceDetailViewPager を追加
public void setupPlaceDetailViewPager(Event event) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
PlaceDetailViewPager placeDetailViewPager = new PlaceDetailViewPager();
placeDetailViewPager.setEvent(event);
transaction.add(R.id.fragment_container, placeDetailViewPager,PlaceDetailViewPager.class.getSimpleName());
transaction.addToBackStack(PlaceDetailViewPager.class.getSimpleName());
transaction.commit();
}
SpecialsList をバックスタックに追加する
public void setupEventSpecials(Agenda[] agendas) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
SpecialsList specialsList = new SpecialsList();
specialsList.setAgendas(agendas);
transaction.add(R.id.fragment_container, specialsList,SpecialsList.class.getSimpleName());
transaction.addToBackStack(SpecialsList.class.getSimpleName());
transaction.commit();
}
フラグメントに含まれるもの。
- PlacesEventMainViewPager には 3 つのリストフラグメントが含まれています。
- PlaceDetailViewPager には 2 つのリストフラグメントが含まれています
- SpecialsList は 1 つのリストフラグメントです。
PlacesEventMainViewPager フラグメント内の項目の 1 つをクリックすると、PlaceDetailViewPager フラグメントにアクセスできます。PlaceDetailViewPager フラグメントのボタンをクリックすると、SpecialsList にアクセスできます。
詳細が必要な場合はお知らせください。ありがとう!