Android:调用onCreateOptionsMenu但片段中的操作栏菜单未更新

时间:2015-10-13 10:25:50

标签: android android-fragments menu

我在活动中使用drawerlayout和几个片段。通过单击导航项,我以这种方式切换片段:

switch (index) {
            case 0:
                if (checkinFragment == null) {
                    checkinFragment = new CheckinFragment();
                    ft.add(R.id.main_container, checkinFragment, "0");
                } else {
                    ft.show(checkinFragment);
                }

                break;
            case 3:
                if (jianGuanFragment == null) {
                    jianGuanFragment = new JianGuanFragment();
                    ft.add(R.id.main_container, jianGuanFragment, "3");
                } else {
                    ft.show(jianGuanFragment);
                }

                break;
        }

        ft.commitAllowingStateLoss();

每个片段在其onCreateOptionsMenu(Menu menu, MenuInflater inflater)方法中都有一个不同的菜单资源文件。

步骤:
1.首次进入活动时,显示checkinFragment中的菜单。(好的)
2.然后切换到jianGuanFragment,显示jianGuanFragment中的菜单。(右图)
3.但是,当切换回第一个片段(checkinFragment)时,操作栏菜单不会更新。显示菜单仍然是jianGuanFragment中的菜单。那就是问题所在。

从日志中我知道每次切换到它时都会调用显示片段中的onCreateOptionsMenu。那就是说:

调用了onCreateOptionsMenu,但未更新操作栏菜单。

任何人都可以帮助我吗?非常感谢。

编辑1:在onCreateOptionsMenu中添加代码:
(1)在checkinFragment中

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);

        LogUtils.e("TAG", "CheckinFragment onCreateOptionsMenu");
        menu.clear();
        inflater.inflate(R.menu.menu_setting, menu);
    }

(2)in jianGuanFragment

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);

        LogUtils.e("TAG", "JianGuanFragment onCreateOptionsMenu");
        menu.clear();
        inflater.inflate(R.menu.menu_jianguan, menu);
    }

编辑2:我使用的是工具栏,而不是旧的操作栏。

3 个答案:

答案 0 :(得分:0)

使用invalidateOptionsMenu()。您需要在需要调用OnCreateOptionsMenu()的地方使用它。

修改 如果您想从getActivity().invalidateOptionsMenu()拨打电话,可以使用Fragment

希望有所帮助!!!

答案 1 :(得分:0)

试试这个 1)在checkinFragment中

 @Override
    public void onPrepareOptionsMenu(Menu menu) {
        menu.clear();
        LogUtils.e("TAG", "CheckinFragment onCreateOptionsMenu");
        getActivity().getMenuInflater().inflate(R.menu.menu_setting, menu);
        super.onPrepareOptionsMenu(menu);
   }

答案 2 :(得分:0)

最后我找到了解决方案:

每次输入片段时,再次将工具栏重新设置为ationbar。

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);

    if (!hidden) {
        AppCompatActivity compatActivity = (AppCompatActivity) mActivity;
        mToolbar = (Toolbar) compatActivity.findViewById(toolbarId);
        compatActivity.setSupportActionBar(mToolbar);
    }
}