2013-03-19 14 views
6

jfeinstien10のSlidingMenuを使用しています。引き出すメニューはFragmentです。ユーザーがメニュー項目をクリックすると、それはこのようなものはない:フラグメント内のフラグメントトランザクション

FragmentTransaction t = getActivity().getSupportFragmentManager().beginTransaction(); 
SherlockListFragment mFrag = new ItemsFragment(); 
t.replace(R.id.main_frag, mFrag); 
t.commit(); 

はしかし、私は別のFragmentからFragmentを制御することをお勧めではないことを聞いたことがあります。このような状況では、これは容認できる方法ですか?または、親にコールバックメソッドを使用する必要がありますFragmentActivity

コールバックメソッドが適切な方法の場合は、この動作の例をご覧ください。

答えて

18

フラグメントでトランザクションを実行する代わりに、アクティビティレベルまで残すことをお勧めします。これを行うには、アクティビティーでパブリック・メソッドを定義し、フラグメントから呼び出すことができます。たとえば:

class MainActivity extends Activity{ 
    .... 

    public void replaceFragment(){ 
     FragmentTransaction t = getSupportFragmentManager().beginTransaction(); 
     SherlockListFragment mFrag = new ItemsFragment(); 
     t.replace(R.id.main_frag, mFrag); 
     t.commit(); 
    } 

    .... 
} 

そして、あなたの断片内に、次の呼び出します:

((MainActivity)getActivity()).replaceFragment(); 

は、あなたの活動があるとし

関連する問題