activity
sに基づく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();
何か案は?ありがとう。