0

activitysに基づく1 つのすべてのナビゲーションを備えたアプリに直面しましたFragment。次のステップを含む場所が 1 つあります。

fragment1 はコンテナー id1 で置き換えられました。add同じ id1 コンテナーに fragment2 を追加するために使用します。replace同じid1コンテナにfragment3を追加するために使用した後。

無防備な取引3件です。すべてバックスタックに追加されます。しかし、最後に戻ると、フラグメント2は表示されず、コンテナid1にfragmtent1のみが表示されますが、フラグメント2はバックスタックにあります。次に戻るボタンを押しても効果がないため、フラグメント1はまだ表示されています。次に戻るボタンを押した後、フラグメント1は削除されますコンテナから。

最初に戻るボタンを押した後、fragment2 はそのビューを作成しないように見えるため、彼はコンテナーに消えています。

置換に使用したコードの一部があります。

FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.kp_content_frame, fragment);

    if (addToBackStack) {
        transaction.addToBackStack(fragment.getTag());
    }
    if (allowingStateLoss) {
        transaction.commitAllowingStateLoss();
    } else {
        transaction.commit();
    }

追加する場合:

final String tagToAdd = fragment instanceof BaseFragment ? ((BaseFragment) fragment).getCustomTag() : fragment.toString();

        if(isDuplicateFragment(tagToAdd)) {
            return;
        }

        FragmentTransaction transaction = fragmentManager.beginTransaction();

        if (enterPopAnim != 0 || exitPopAnim != 0) {
            transaction.setCustomAnimations(enterAnim, exitAnim, enterPopAnim, exitPopAnim);
        } else if(enterAnim != 0 || exitAnim != 0) {
            transaction.setCustomAnimations(enterAnim, exitAnim);
        }

        transaction.add(R.id.kp_content_frame, fragment, tagToAdd);

        if (addToBackStack) {
            transaction.addToBackStack(tagToAdd);
        }
        transaction.commit();

何か案は?ありがとう。

4

1 に答える 1

1

しかし、最後に押し返すと、fragment2は表示されません

コンテナー id1 に 2 つのフラグメントがあるためです。そして、フラグメント 1 はフラグメント 2 の上にあります。

コンテナ id1 には Fragmtent1 しか表示されませんが、fragment2 はバック スタックにあります。

次に戻るボタンを押すと、表示されていなかったfragment2が削除されたためです。

簡単な解決策:トランザクションを混在addさせないでください。どこでもreplace使用できます。replace

于 2015-07-07T14:17:36.590 に答える