2017-04-26 10 views
0

この質問には多くの回答がありますが、技術的には私の質問は異なります。私はいくつかのドキュメントを読んで、1つのアクティビティで複数のフラグメントを使用すべきではないことに同意しました。フラグメントは、プロジェクトの要件やUIの仕様に依存 ので、自分のアプリケーションのアーキテクチャは 1. BaseActivity、すべての活動であること 2. BaseFragment、すべてのフラグメントから延び、その 私のコードから延び:フラグメントを使用する最良の方法

私が作ったBaseActivityで

以下の機能

public void replaceFragment(int containerViewId, Fragment fragment, String fragmentTag, boolean addToBackStack) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(containerViewId, fragment, fragmentTag); 
    if(addToBackStack) 
     fragmentTransaction.addToBackStack(fragmentTag); 
    if(fragmentTag.matches("") && addToBackStack) 
     fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
} 
> FragmentB(置き換え) -

public void popBackStackImmediate() { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.popBackStackImmediate(); 
} 

は合計フラグメント

public List<Fragment> fragmentList(){ 
    return getSupportFragmentManager().getFragments(); 
} 

ゲットでframeLayoutに

public void addFragment(int containerViewId, Fragment fragment, String fragmentTag, boolean addToBackStack, boolean isPending) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(containerViewId, fragment, fragmentTag); 
    if(addToBackStack) 
     fragmentTransaction.addToBackStack(fragmentTag); 
    if(fragmentTag.matches("") && addToBackStack) 
     fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
    if(isPending) 
     fragmentManager.executePendingTransactions(); 
} 

戻るを押して機能をフラグメントを追加するには、フローが FragmentAです(追加) - >

QUET SION 1:なぜtotalFragmentsが2を表示していますか?私はFragmentBをAに置き換えました

質問2:私は2つのフラグメントを表示しているのに、私はスタックからどのように削除することができますか?

質問3:FragmentBが表示されているが、FragmentAフラグメントのライフサイクルすぎて作業がonResumeを..meansとのonCreate funcationsがあまりにも奇妙呼んでいるが、

答えて

0

質問1、なぜ真のdontが知っている:あなたはそのための任意の断片の断片数を削除していませんフラグメントを置き換えるときは、それをインスタンスではなくフラグメントコンテナに置き換えます。

質問2:バックスタックにフラグメントを追加すると、戻るボタンを押すとそのフラグメントに戻ることになります。ただし、フラグメントが削除されていないため、フラグメントマネージャのフラグメント数は2になります。

getSupportFragmentManager().beginTransaction().remove(yourFragment).commit(); 

質問3:あなたは、フラグメントBにフラグメントAを交換したら、フラグメントAがアクティブになるとすれば、それは、onDestroyonDestroyViewだ呼びますあなたはそれを削除したい場合は、次のコードでは、トリックを行いますonCreateViewからライフサイクルを開始するコンテナに戻します。つまり、onResumeの実行は正常ですが、onCreateは正常ではありません。

関連する問題