【问题标题】:How can I set the visibility of an ActionBar item in different fragment如何在不同的片段中设置 ActionBar 项的可见性
【发布时间】:2013-12-19 15:35:50
【问题描述】:

我正在寻找一种方法来设置 MenuItem 在 MainActivity 中的可见性,具体取决于我在哪个 Fragment 上。

有关信息:我正在使用actionBarSherlockzxing 和一些google services

该应用程序是使用导航抽屉(带有 abs)构建的,我也以这种方式操作 FragmentStack,每次当我按下触摸返回时切换到另一个片段时,我都会返回我的 Main Fragment

这是我的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:id="@+id/button_generator" android:title="GENERER" android:icon="@drawable/ic_drawer"></item>
</menu>

这里是我扩充菜单的地方:

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    Log.d(TAG, "================= onCreateOptionsMenu ================= fragSt: " + fragmentStatus);
    this.getSherlock().getMenuInflater().inflate(R.menu.main, menu);

    mGenQrFromContacts = menu.findItem(R.id.button_generator);


    return true;
}

我已经尝试了针对 here 的解决方案,但在我的情况下不起作用。

【问题讨论】:

    标签: android android-fragments actionbarsherlock menuitem


    【解决方案1】:

    你应该在你的Fragment 中试试这个:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // ...  
        // call the method setHasOptionsMenu, to have access to the menu from your fragment
        setHasOptionsMenu(true);
    
        //...
    }
    
    // the create options menu with a MenuInflater to have the menu from your fragment
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.findItem(R.id.button_generator).setVisible(true);
        super.onCreateOptionsMenu(menu, inflater);
    }  
    

    还有这个,在你的Activity

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.my_layout, menu);
        menu.findItem(R.id.button_generator).setVisible(false);
        return true;
    }
    

    希望这会有所帮助。

    【讨论】:

    • 这正是我用来控制多个片段(选项卡)之间操作项可见性的模式
    【解决方案2】:

    当您想要更改片段时,您需要设置一个标志来指示您想要充气的菜单,然后您所要做的就是在您的活动中调用invalidateOptionsMenu() 再次调用onCreateOptonsMenu 并使用您设置的标志来充气不同的菜单

    【讨论】:

      【解决方案3】:

      我发现了一个窍门,你不妨试试这个。

      public void displayMenu(boolean show) {
              setHasOptionsMenu(show);
              getActivity().invalidateOptionsMenu();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多