0

我在操作栏中有一个刷新菜单项。我可以像这样展开操作视图(== 在操作栏中显示进度条):

menuItem.setActionView(R.layout.action_view_refresh);
menuItem.expandActionView();

当用户按下操作栏中的菜单项时,我会这样做。

但是现在我想在应用程序启动并且我的片段显示时自动显示它(在片段的 onCreateView 中)。问题是这个功能

public boolean onCreateOptionsMenu(Menu menu)

,我的 menuItem 被初始化的地方,在 onCreateView 之后被调用。

如何在 onCreateOptionsMenu 之前初始化 menuItem 以便我可以在 onCreateView 中展开 actionView?

4

1 回答 1

2

作为一般规则,您用于supportInvalidateOptionsMenu触发菜单项的刷新或某些操作。所有的更新工作都应该放在里面onPrepareOptionsMenu()。如果您希望片段触发,首先您可以在活动级别执行以下操作:

// 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);
}

然后,在您的片段 createView 中,您可以调用该invalidate方法:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    // trigger the actionview   
    ((YourActivity) getActivity()).invalidate(true);
}
于 2013-06-10T14:28:16.227 回答