在我的片段中,我只想在横向模式下在工具栏中显示我的Menu / MenuItems。当我改变方向时,我注意到onCreateOptionsMenu
和onPrepareOptionsMenu
没有被调用。
换句话说,我的菜单项的横向布局仅在横向模式下开始时有效,但在我尝试更改到横向模式时却无效(崩溃时)从肖像变为风景。)
public class MyFragment extends Fragment
{
private int orientation;
@Override
public void onCreate(Bundle savedInstanceState)
{
orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE)
setHasOptionsMenu(true);
super.onCreate(savedInstanceState);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
if (orientation == Configuration.ORIENTATION_LANDSCAPE)
inflater.inflate(R.menu.my_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu)
{
initializeLandscapeMenuViews(menu);
super.onPrepareOptionsMenu(menu);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
if (orientation == Configuration.ORIENTATION_PORTRAIT)
initializePortraitMenuViews(view);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.my_layout, container, false);
}
// other code not shown
}
当我尝试访问我在initializeLandscapeMenuViews()
中初始化的视图时发生崩溃,因为永远不会调用onPrepareOptionsMenu()
。
我使用调试器检查了调用的顺序:
以横向模式开始
onCreate
onViewCreated
onCreateOptionsMenu
onPrepareOptionsMenu
然后,方向更改为肖像
onCreate
onViewCreated
onCreate
onViewCreated
onCreateOptionsMenu
和onPrepareOptionsMenu
未被调用
我错过了什么? (感谢任何帮助。)
答案 0 :(得分:0)
基本上我没有看到你的方法有任何问题。 不过,你试过调用invalidateOptionsMenu()吗? 它假设通过调用onCreateOptionsMenu()告诉操作系统要重绘菜单。
答案 1 :(得分:-1)
编辑:我认为TS正在处理活动,但他正在使用片段。遗憾。
如果您正在使用该活动:onCreateOptionsMenu
和onPrepareOptionsMenu
具有布尔返回值。所以,你需要返回一个布尔值(而不是void)。在您当前的方法中,您不会因此而覆盖这些函数。这就是为什么它似乎永远不会调用函数。
有关详细信息,请参阅API。