我在操作栏中有一个刷新菜单项。 我可以像这样展开操作 View (==在操作栏中显示进度条):
menuItem.setActionView(R.layout.action_view_refresh);
menuItem.expandActionView();
当用户按下操作栏中的菜单项时,我会执行此操作。
但现在我想在应用程序启动并且我的 fragment 显示时自动显示它(在 fragment 的 onCreateView 中)。 问题在于该函数
public boolean onCreateOptionsMenu(Menu menu)
,我的menuItem初始化的地方,在onCreateView之后调用。
如何在 onCreateOptionsMenu 之前初始化 menuItem 以便在 onCreateView 中展开 actionView ?
最佳答案
作为一般规则,您可以使用 supportInvalidateOptionsMenu
触发刷新或对菜单项执行某些操作。所有的更新工作都应该放在onPrepareOptionsMenu()
内。如果您希望 fragment 触发,首先您可以在 Activity 级别执行以下操作:
// YourActivity
boolean trigger = false;
public void invalidate(boolean isTrigger) {
trigger = isTrigger;
supportInvalidateOptionsMenu();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(trigger) {
MenuItem menuitem = menu.findViewById(R.id.menu_id);
menuItem.setActionView(R.layout.action_view_refresh);
menuItem.expandActionView();
// reset trigger
trigger = false;
}
return super.onPrepareOptionsMenu(menu);
}
然后,在 fragment createView 中,您只需调用 invalidate
方法即可:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// trigger the actionview
((YourActivity) getActivity()).invalidate(true);
}
关于java - fragment 的 onCreateView 在 onCreateOptionsMenu 之前调用,因此我无法在 fragment 启动时展开操作 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17025204/