onCreateOptionsMenu和onPrepareOptionsMenu不会调用方向更改
在我的片段中,我只想在横向模式下在我的工具栏中显示我的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()
中initializeLandscapeMenuViews()
的视图时会发生崩溃,因为onPrepareOptionsMenu()
永远不会被调用。
我使用调试器检查了调用的顺序:
从横向模式开始
onCreate
onViewCreated
onCreateOptionsMenu
onPrepareOptionsMenu
然后,方向改变为肖像
onCreate
onViewCreated
然后,方向改变回风景
onCreate
onViewCreated
onCreateOptionsMenu
和onPrepareOptionsMenu
不会被调用
我错过了什么? (任何帮助表示赞赏)。
基本上我没有看到你的方法有任何问题。 不过,你有没有尝试过调用invalidateOptionsMenu()? 它假设通过调用onCreateOptionsMenu()来告诉操作系统你想重画你的菜单。
编辑:我认为TS正在开展活动,但他正在使用片段。 抱歉。
如果您使用的是活动: onCreateOptionsMenu
和onPrepareOptionsMenu
有一个布尔返回值。 所以,你需要返回一个布尔值(而不是void)。 在你目前的方法中,你不会因为这个而重写函数。 这就是为什么看起来这些功能从未被调用。 有关更多信息,请参阅API。
上一篇: onCreateOptionsMenu and onPrepareOptionsMenu not called on orientation change