Frag_A、Frag_Bという3つのフラグメントがあります。& Frag_Cです。フラグメントをポップ&再度同じフラグメントに置換すると空白のページが表示されます
ナビゲーションロジック:Frag_A ==> Frag_B ==> Frag_C。 Frag_Aはレイアウトに最初に追加されるので、最初にFrag_Aが画面に表示され、ユーザーが次のボタンを押すとFrag_AがFrag_Bに置き換えられ、Frag_Bが画面に表示されます。 Frag_BはFrag_Cに置き換えられ、Frag_Cが画面に表示されます。
この時点ですべてのコードが正常に動作します。
次のフラグメントに変更するための方法:活性
//here, argument 'fragment' is either Frag_B or Frag_C
public void showFragment(Fragment fragment){
FragmentManager fragMgr = activity.getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();
fragTrans.replace(R.id.frag_placeholder, fragment, fragmentName);
fragTrans.addToBackStack(null);
int transId = fragTrans.commit();
fragMgr.executePendingTransactions();
}
レイアウトファイル(活動が開始したときFrag_Aがfrag_placeholderに添加される):
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<FrameLayout
android:id="@+id/frag_placeholder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</merge>
しかし、Frag_Cが示された後、もしI pop Frag_C物理的な戻るボタンを押してshowFragment(Frag_C)
メソッドを呼び出すと、コードが物理的なボタンが押されたことが検出された直後にFrag_Cを再度表示する、画面に空白のページが表示されます。なぜ&それを修正するには?
================私が言った=====================
を説明上記の「*私のコードは、物理的なボタンが*押されて検出され、再び右後Frag_Cを表示」、ここで私が何を意味するかである:@ Luksprogのコメントに基づいて
@Override
public void onBackPressed() {
super.onBackPressed();
//I detect the Physical Back button is pressed & invoke the method to show the popped Frag_C again.
}
*物理的なボタンが押された直後にコードが検出された直後* *正確にはどういう意味ですか? – Luksprog
OP – Mellon
で私の説明を確認してください。野生の推測...フラグメントの同じインスタンスで 'showFragment()'メソッドを使用しますか?また、少し奇妙に見えますが、ユーザーはフラグメントを削除して再度表示することができます。 – Luksprog