我的活动与下图相同:
FragmentA是一个listview,它有一个SearchWidget作为菜单项(旧设备上没有显示,只有API11及以上版本)。 FragmentB是一个详细视图,有几个菜单项。
当ActivityA在平板电脑上运行时,FragmentA + FragmentB的菜单项在操作栏中可见。这是正确的,也很完美。
现在在Nexus 7上,我想要混合使用:
我唯一无法工作的是动作栏。当我将设备从横向模式(平板电脑视图)旋转回纵向(手机视图)时,操作栏仍会显示FragmentA + FragmentB的菜单项。
我尝试将ActivityA中的invalidateOptionsMenu()
onResume()
称为FragmentA,但没有运气。
有没有人有想法?
答案 0 :(得分:0)
我认为这是适当的活动重新创建过程。
旋转屏幕后,您的活动将被销毁(默认情况下)。 但在它被销毁之前,它会保存状态,包括所有当前活动碎片的状态。 稍后,当在方向更改后创建活动时,它将恢复已保存的状态(包含两个片段)。当细节片段恢复时,它会附加菜单项。
您可以通过在onCreateView
的{{1}}中添加日志语句或使用调试器来检查此问题。
如果是你的情况那么你有下一个解决方案:
很抱歉,如果我的答案对你没有任何帮助
答案 1 :(得分:0)
这对我有用。 在活动A中尝试查找片段B并设置setHasOptionsMenu(mTwoPane)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_document_list);
Fragment fragment = getFragmentManager().findFragmentByTag(TAG_FRAGMENT_DETAIL);
if (getResources().getBoolean(R.bool.has_detail)){
mTwoPane = true;
....
}
if (fragment != null) {
fragment.setHasOptionsMenu(mTwoPane);
invalidateOptionsMenu();
}
}