簡體   English   中英

Android:調用onCreateOptionsMenu,但未在片段中更新操作欄菜單

[英]Android: onCreateOptionsMenu is called but actionbar menu isn't updated in fragment

我在有幾個片段的活動中使用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)在檢入片段中

@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)在劍管碎片中

@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:我使用工具欄,而不是舊的動作欄。

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

編輯:如果要從Fragment調用getActivity().invalidateOptionsMenu()則可以使用它。

希望有幫助!!!

在checkinFragment中嘗試1)

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

最后我找到了解決方案:

每次輸入片段時,再次將工具欄重新設置為ationbar。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM