2013-05-15 5 views
11

私はプロローラムを持っており、どこでも解決策を見つけることができません。addToBackStackは機能しません。フラグメントをポップする代わりにアクティビティを閉じます。

戻るボタンを押したときにアプリが前のフラグメントに戻ることはなく、アクティビティを閉じます。

私は、[1]、[2]、[3]、[4]の4つの断片を表示する活性を持っています。最初の3つのフラグメントをアクションバーで切り替えることができます。バックスタックに追加する必要はありません。

フラグメント[4]は、フラグメント[3]で選択されたアイテムの詳細図です。私が[4]を押して戻ると、私はフラグメント[3]に戻り、アプリケーションを終了しません。

遷移は、断片が配置された活性により、このように行われる:toBackStack遷移からである場合を除き、常に偽である

private void replaceFragment(Fragment fragment, boolean toBackStack){ 

    if(fragment != null){ 

     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.container, fragment); 

     if(toBackStack) 
      fragmentTransaction.addToBackStack(null); 

     fragmentTransaction.commit(); 
    } 
} 

[3]〜[4]。

私がすべての遷移でTrueStackに渡すと、アクティビティはとにかく閉じます。

答えて

17

私は同じ問題を抱えていました。具体的には、私はPreferenceFragmentを実装しています。以前にロードされたフラグメントが何であっても、戻るボタンを押して戻してください。

「バックスタックは、」自動的にシステムバックボタンでトリガーされない何かであることが表示されます。私のソリューションは、手動でから戻ってスタックをポップしたオーバーライドonBackPressed:私は私の好みのフラグメントに移動するたびに

@Override 
public void onBackPressed() 
{ 
    if (inSettings) 
    { 
     backFromSettingsFragment(); 
     return; 
    } 
    super.onBackPressed(); 
} 

を、私はその状態を維持するために活動してtrueにinSettingsブール値を設定します。あなたは[4]あなたが断片にあるときの状態を追跡し、戻るボタンを傍受することができればそう、あなたが手動で呼び出すことができるはず

private void backFromSettingsFragment() 
{ 
    inSettings = false; 
    getFragmentManager().popBackStack(); 
} 

:ここに私のbackFromSettingsFragment方法は次のようになります

getFragmentManager().popBackStack(); 

フラグメント[3]に戻る。

注:あなたが[3]バックスタックに断片を追加する必要があることを覚えておいてください、ない断片[4]。

+3

アクティビティで状態を保持するのではなく、onBackPressed()でこれを行う方が良いかもしれません if(getFragmentManager() ().getBackStackEntryCount()> 0) getFragmentManager()。popBackStack(); – toidiu

関連する問題