从 NavigationDrawer 部分打开子片段

Open child fragment from NavigationDrawer Section

我正在尝试从导航抽屉的片段中打开子片段。请看下面的图片,以便更好地理解我。

代码:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragmentTransaction.replace(R.id.fragment_container, new ChatFragment(), MainActivity.CHAT_FRAGMENT_TAG);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

错误调试:

java.lang.IllegalArgumentException: No view found for id 0x7f0b0072 (com.epiccode.enjoytheplace:id/fragment_container) for fragment ChatFragment{4211cf20 #1 id=0x7f0b0072 CHAT_FRAGMENT}
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:882)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
        at android.app.BackStackRecord.run(BackStackRecord.java:684)
        at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
        at android.app.FragmentManagerImpl.run(FragmentManager.java:443)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5146)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
        at dalvik.system.NativeStart.main(Native Method)

注意:我正在使用 neokree navigation drawer 提前致谢。

我假设您将该代码放在 Navigation Drawer 片段中,当然它不包含其中的 'fragment_container' 视图。

您必须调用activity方法,传递要打开的片段的编号或名称,例如:

((MainActivity) getActivity()).switchFragment(1);

其中 switchFragment 类似于:

public void switchFragment(int position) {
   switch (position) {
      case (1):
         FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
         fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
         fragmentTransaction.replace(R.id.fragment_container, new ChatFragment(), MainActivity.CHAT_FRAGMENT_TAG);
         fragmentTransaction.addToBackStack(null); 
         fragmentTransaction.commit(); 
         break;
       .....
   }
}