0

2つのフラグメントを受け取る1つのコンテナを含むアクティビティが1つあります。ユーザーがFragmentAをクリックしたときにAndroidフラグメント単純バックスタット

showFragment(new FragmentA()); 

private void showFragment(Fragment fragment) { 
    getSupportFragmentManager().beginTransaction() 
      .replace(R.id.container, fragment, fragment.getTag()) 
      .addToBackStack(fragment.getTag()) 
      .commit(); 
} 

はその後、私は活動レベルでこのクリックを受け取ると私は呼ん:私は最初のフラグメント開始活動を初期化したら

showFragment(new FragmentB()); 

を今私は戻って押したときボタンを押すとフラグメントA(正しい)に戻り、もう一度戻るボタンを押すと空の画面が表示されます(ただし、同じアクティビティにとどまります)。私はちょうど(アクティビティは親を持っていないので)アプリを閉じることができます。

フラグメントやバックスタックに関連する投稿がたくさんありますが、これに対する簡単な解決策が見つかりません。フラグメントの数を増やす可能性があるので、フラグメントAまたはフラグメントBをバックプレスしているかどうか確認する必要がある場合を避けたいと思います。そのメソッドを維持する必要があります。

答えて

0

最初のフラグメントを追加すると、空白の画面を無意識に追加しているので、calling addToBackStack()です。

は今何ができるかonBackPressed()に次のメソッドを呼び出しであり、あなたの問題は

に解決される
public void moveBack() 
    { 
//FM=fragment manager 
     if (FM != null && FM.getBackStackEntryCount() > 1) 
     { 
      FM.popBackStack(); 
     }else { 
      finish(); 
     } 
    } 

)(ONBACKPRESSEDスーパーを呼び出さないでください。

上記の方法を呼び出してください。

+0

私の問題は、空の画面をスタックなしでスタックに追加していることを認識していないことです。/ FM.getBackStackEntryCount()> 1が問題を解決するかどうかを確認します。ありがとう! – Bugdr0id

+0

フラグメントのコンセプトは非常にトリッキーで広大です!とにかく喜んで助けることができました! –

0

addToBackStack(fragment.getTag())

私はあなたのフラグメントAが正しく飛び出していない、フラグメントを追加使用しようと思います

0

はむしろに置き換えるだけではなく、フラグメントのためのフラグメントBのためにそれを使用適切なバックナビゲーションを持っている、しかし、あなたは使用してバックスタックの数を確認することができます。

FragmentManager fragmentManager = getSupportFragmentManager(); 
int count = fragmentManager.getBackStackEntryCount(); 

を、あなたはあなたの活動が特定のフラグメントの数に閉じたいときは、直接活動onBackPressed()finish()を呼び出すことができます。