2015-10-13 84 views
2

我在有几个片段的活动中使用drawerlayout。通过点击导航项目,我切换片段是这样的:Android:onCreateOptionsMenu被调用,但操作栏菜单没有更新片段

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)方法膨胀不同的菜单资源文件。

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

而从日志中我知道onCreateOptionsMenu在显示片段中被称为每次我切换到它。也就是说:

onCreateOptionsMenu被调用,但不更新操作栏菜单。

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

EDIT 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)在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:我使用工具栏上,没有旧的操作栏。

+0

@ unrealsoul007我已经在每个片段的'onActivityCreated'中设置了setHasOptionsMenu(true)。我已经尝试将它写入片段的onCreateOptionsMenu中,但它不起作用。 – hanswim

+0

你可以尝试使用onPrepareOptionsMenu()在片段 – Raghavendra

回答

0

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

编辑: getActivity().invalidateOptionsMenu()可以,如果你想从Fragment调用它使用。

希望有帮助!

+0

invalidateOptionsMenu()不可用在片段我猜..? – Raghavendra

+0

无论是否使用invalidateOptionsMenu(),都会调用当前片段中的onCreateOptionsMenu()。问题是即使操作栏菜单没有更新。 – hanswim

+0

Raghavendra代码编辑。 –

0

在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); 
    } 
+0

它没有为我工作。 – hanswim

0

最后试试这个 1)我找到了解决办法:

每次进入一个片段,再重新设置工具栏为ationbar。

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

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