0

私の Android アプリにはアクティビティが 1 つしかなく、すべてのフラグメントが 1 つのフレームレイアウトで追加または置換されます。

問題は、フラグメント バックスタックに 2 つの異なるビューページャーがあり、アクティビティが再作成されたときに、2 番目のビューページャーが最初のビューページャーとして表示されることです。

以下は、フラグメントを発生順にバックスタックに追加する方法です。3 は、アクティビティが再作成された後に発生するフラグメントです。

  1. setupPlacesEventMainView()、これは FragmentStatePagerAdapter を使用するビューページャーです (アクティビティが再作成された後に適切に表示されます)
  2. setupPlaceDetailViewPager、これは FragmentStatePagerAdapter を使用するビューページャーです。(問題: PlacesEventMainViewPager が PlaceDetailViewPager の代わりにここに表示されます。この問題は、EventSpecials に移動しなくても発生します)
  3. 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 にアクセスできます。

詳細が必要な場合はお知らせください。ありがとう!

4

1 に答える 1

0

PlacesEventMainViewPager をバックスタックに追加することはありません。これにより、PlaceDetailViewPager を順番にリストした場合、バックスタックの最初のページになります。

于 2016-02-01T22:19:05.077 に答える