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