java - 无法在某些 fragment 上隐藏 Activity 的选项菜单

标签 java android android-fragments show-hide android-optionsmenu

我在一个 Activity 中使用选项菜单,因为我已经膨胀了菜单并且菜单项的 onItemSelected 已完成。在 fragment 中,我隐藏了不需要在 fragment 上显示的菜单项。

做得很好,我可以在 fragment 上看到所需的菜单项。但是在某些 fragment 上我不想显示任何菜单项。因此,为此我尝试清除菜单,还尝试对所有项目设置 setVisible false,还尝试 setHasOptionsMenu(false); , 但没有一个在工作。我可以在该 fragment 上看到所有三个菜单项。

我也试过这个答案:Hide/Show Action Bar Option Menu Item for different fragments

从 onPreparedOptionsMenu 中的 Search merchants fragment 我做了 menu.setGroupVisible(R.id.main_menu_group, false);

还是不行。

菜单

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <group
        android:id="@+id/main_menu_group">
    <item
        android:id="@+id/action_search"
        android:orderInCategory="100"
        android:title="customer"
        app:showAsAction="always"
        android:icon="@drawable/ic_search"/>
    <item
        android:id="@+id/action_create"
        android:orderInCategory="100"
        android:title="customer"
        app:showAsAction="always"
        android:icon="@drawable/ic_create"/>
    <item
        android:id="@+id/action_edit"
        android:orderInCategory="100"
        android:title="customer"
        app:showAsAction="always"
        android:icon="@drawable/ic_save"/>
    </group>
</menu>

家庭 Activity :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    //     menu.clear();
    getMenuInflater().inflate(R.menu.menu_customer, menu);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.action_create:

            String favMerchantId = pref.getString("favMerchantId","");
            String favKiranaName = pref.getString("favKiranaName","");

            if(pref.getString("favMerchantId","").equals("null") && pref.getString("favKiranaName","").equals("null")){

                CommonUtils.showAlert(HomeActivity.this,"There is no merchant yet.Please search for merchant.","No Merchant");

            }

            else {

                FragmentManager fragmentManager = getSupportFragmentManager();
                AddOrderFragment fragment1 = new AddOrderFragment();
                Bundle bundle = new Bundle();
                bundle.putString("kiranaName", favKiranaName);
                bundle.putString("merchant_id", String.valueOf(favMerchantId));
                bundle.putBoolean("ordersFrag", true);
                fragment1.setArguments(bundle);
                fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                fragmentManager.beginTransaction().replace(R.id.mycontainer, fragment1, "RETRIEVE_ADDORDER_FRAGMENT").addToBackStack("B").commit();
            }

            break;

        case R.id.action_edit:

            if (CommonUtils.isConnectedToInternet(HomeActivity.this)) {

                if(AddOrderFragment.mOrderItemsList.isEmpty())
                {
                    CommonUtils.showAlert(HomeActivity.this,getResources().getString(R.string.listAlert),"List");
                    // showAlert(getString(R.string.listAlert));
                }
                else {
                    Log.e("itemList", String.valueOf(AddOrderFragment.mOrderItemsList.size()));

                    Gson gson = new Gson();
                    String toServer = gson.toJson(
                            Collections.singletonMap("items", AddOrderFragment.mOrderItemsList)
                    );

                    String date_time = String.valueOf(CommonUtils.getCurrentDateTime());

                    new AddOrderAsyncTask(HomeActivity.this,AddOrderFragment.ordersFrag).execute(toServer,pref.getString("api_key",""), pref.getString("sessionUserId",""), AddOrderFragment.mMerchantId,date_time);
                }

            }
            else {
                // showAlert(getString(R.string.check_network));
                CommonUtils.showAlert(HomeActivity.this,getResources().getString(R.string.check_network),"Check network");
            }

            break;
        case R.id.action_search:
            // go to search fragment


            FragmentManager fragmentManager = HomeActivity.this.getSupportFragmentManager();
            SearchMerchantFragment fragment1 = new SearchMerchantFragment();
            fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            fragmentManager.beginTransaction().replace(R.id.mycontainer, fragment1).addToBackStack("D").commit();
            return true;

        default:
            break;
    }

    return true;
}
order's fragment to hide some menu items :

    @Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);


    MenuItem someMenuItem3 = menu.findItem(R.id.action_create);
    someMenuItem3.setVisible(true);
    // This does work
    MenuItem someMenuItem = menu.findItem(R.id.action_search);
    someMenuItem.setVisible(false);

    MenuItem someMenuItem1 = menu.findItem(R.id.action_edit);
    someMenuItem1.setVisible(false);
}

Search merchant fragment : 在这里我想隐藏菜单,或者所有的菜单项。

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);

       MenuItem someMenuItem3 = menu.findItem(R.id.action_create);
    someMenuItem3.setVisible(false);
    // This does work
    MenuItem someMenuItem = menu.findItem(R.id.action_search);
    someMenuItem.setVisible(false);

    MenuItem someMenuItem1 = menu.findItem(R.id.action_edit);
    someMenuItem1.setVisible(false);

}

如何隐藏这个菜单?

请帮忙..谢谢..

最佳答案

你可以试试这个,

@Override 
public void onPrepareOptionsMenu(Menu menu) {
    menu.clear();
}

setHasOptionsMenu(true); 在 fragment 的 onCreate 中。

关于java - 无法在某些 fragment 上隐藏 Activity 的选项菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42018431/

相关文章:

java - 谁能告诉我 java 中 volatile 和 static 的区别

java - 如何设置 Context.INITIAL_CONTEXT_FACTORY?没有初始上下文异常?

java - 比较对象的问题

java - Android Google Maps Api v2 fragment : NullPointerException error

android - 如何在 Android 中使用 InputFilter 限制 EditText 中的字符?

android - FragmentTabHost 底部的 TabWidget

android - 在后台堆栈中添加同一 fragment 的多个实例,先前添加的实例的数据仍然存在

android - 如何将 fragment 添加到 ViewPager? addView 使我的应用程序崩溃

java - 从 java (intellij) 连接到远程 mysql (phpmyadmin) 服务器时出现问题

android - React-Native 0.56 如何使用 fresco 启用 Android gif 支持?