2016-08-05 3 views
2

私はしばらくこのようにしてきました、それは正しい方法ですか?別のフラグメントからフラグメントを膨張させる正しい方法は何ですか?

活動:一部のリスナーで

public void toSettings(){ 
    Fragment_Settings frag = new Fragment_Settings(); 
    fm.beginTransaction() 
      .replace(R.id.mainContainer, frag) 
      .addToBackStack(null) 
      .commit(); 
    } 

別のフラグメントで:

((Activity_Main)getActivity()).toSettings(); 
+1

IMHO私はインタフェースを使用する傾向がありますが、このインスタンスではホスティングアクティビティを介して通信する間違ったことはありません。フラグメント内でFragmentManagerを使用していた場合は、getChildFragmentManagerが使用されます。たとえば、ネストされたViewPagerを持つFragmentがあるとします。私が言うように、私の意見は、他のものが変わる可能性があります。しかし、私はそれが設定スクリーンであることを見ると、代わりにそれ自身のアクティビティにあることと関連性があると主張することができます。 –

答えて

0

あなたはちょうどその部分を削除し、あなたのフラグメントがbackstackに追加されることはありません.addToBackStack(null)を必要としません。 。また、後でフラグメントを取得したい場合に備えて、replaceメソッドにTAGを追加することをお勧めします。このようなもの.replace(R.id.mainContainer, frag, TAG)

0

これは正しいようですが、いくつかの提案があります。

  1. あなたはFragment_Settings使用add方法の代わりに、replaceaddToBackStack("tag of Fragment_Settings")代わりのaddToBackStack(null)から以前のフラグメントをバックしたい場合。
  2. newInstanceパターンがFragment_Settings frag = new Fragment_Settings();よりも好ましい。あなたはそれについていくつかの説明を見ることができます。 http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html
    Creating a Fragment: constructor vs newInstance()
  3. あなたはマネージャークラスは、追加、交換またはポップ・プロセスの整理提供し使用することができますフラグメント間を移動する際に、コードの重複を避けるために。 Here is my navigation manager class
関連する問題