2013-03-19 181 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();