Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 方向更改后,碎片的选项菜单不';不要消失_Android_Screen Orientation - Fatal编程技术网

Android 方向更改后,碎片的选项菜单不';不要消失

Android 方向更改后,碎片的选项菜单不';不要消失,android,screen-orientation,Android,Screen Orientation,我根据本教程实现了我的布局: 区别在于: 根据左边的选择,我有不同的片段要展示 名单 “细节片段”(右边的片段)有不同的选项菜单 我的问题是,如果我已经从左侧选择了某个选项,然后将手机旋转到纵向,则最后一个选项菜单仍然存在并且可见 我认为问题来自方向更改后重新创建的最后一个活动“细节”片段。为了测试它,我创建了以下两种方法: @Override public void onStart() { super.onStart(); setHasOptionsMenu(true);

我根据本教程实现了我的布局:

区别在于:

  • 根据左边的选择,我有不同的片段要展示 名单
  • “细节片段”(右边的片段)有不同的选项菜单
我的问题是,如果我已经从左侧选择了某个选项,然后将手机旋转到纵向,则最后一个选项菜单仍然存在并且可见

我认为问题来自方向更改后重新创建的最后一个活动“细节”片段。为了测试它,我创建了以下两种方法:

@Override
public void onStart() {
    super.onStart();
    setHasOptionsMenu(true);
}

@Override
public void onStop() {
    super.onStop();
    setHasOptionsMenu(false);
}
我展示了正确的片段,如下所示:

case R.id.prefs_medicines:
        if (mDualPane) {


            // Check what fragment is shown, replace if needed.
            View prefsFrame = getActivity().findViewById(R.id.preferences);
            if (prefsFrame != null) {
                // Make new fragment to show this selection.
                MedicineListF prefF = new MedicineListF();

                // Execute a transaction, replacing any existing
                // fragment with this one inside the frame.
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.replace(R.id.preferences, prefF);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
            }

        } else {
            // Otherwise we need to launch a new activity to display
            // the dialog fragment with selected text.
            Intent intent = new Intent();
            intent.setClass(getActivity(), MedicinePrefsActivity.class);
            startActivity(intent);
        }
        break;
在我的一个“细节”片段中。当我调试它时,在旋转之后调用onstart

图片中的问题:

1:在景观方面没问题

2:纵向:选项菜单不需要


如何在纵向模式下取消optionsmenu?

我也遇到了同样的问题,只有当savedInstanceState为空时,才在片段中设置setHasOptionsMenu(true)来解决这个问题。如果onCreate获得一个bundle,那么片段将以方向更改为纵向的方式恢复,因此不显示菜单

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null) {
        setHasOptionsMenu(true);
    }
}