java - fragment 的 onCreateView 在 onCreateOptionsMenu 之前调用,因此我无法在 fragment 启动时展开操作 View

标签 java android android-actionbar menuitem oncreateoptionsmenu

我在操作栏中有一个刷新菜单项。 我可以像这样展开操作 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/

相关文章:

java - 我希望 mvn test 在运行单元测试之前运行 sh 文件

android - 带有 CardView 的 RecyclerView 在滚动时滞后

Android 在通知点击时打开特定的标签 fragment

java - 自定义 Jtable header 与其他 header 具有不同的布局

java - 如何根据二维网格上的路径为线条设置不同的颜色

java - 将多个模块的 Javadoc 合并到一个集合中

android - 当Android聊天应用程序处于后台时如何接收消息作为通知

java - 如何在 Android Studio 中静默地将事件添加到日历中?

java - android:连续的标签栏

android - ActionBarDrawer切换动画