0

Я использую меню опций в действии, в котором у меня есть раздутое меню и onItemSelected для пункта меню. А в фрагменте я скрываю элементы меню, которые не требуется отображать на фрагменте.Невозможно скрыть меню параметров действия на некоторых фрагментах

Это хорошо, я вижу нужные пункты меню на фрагментах. Но на некоторых фрагментах я не хочу показывать какой-либо элемент меню. Поэтому для этого я попытался очистить меню, также я попытался setVisible false для всех элементов, также пытался установитьHasOptionsMenu (false); , Но никто не работает. Я вижу все три пункта меню на этом фрагменте.

Также я попробовал этот ответ: Скрыть/Показать панель действий Варианта пункт меню для различных фрагментов

Из поиска купцов фрагмента в onPreparedOptionsMenu я сделал menu.setGroupVisible (R.id.main_menu_group, ложный);

Все еще не работает.

Меню

<?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> 

Главная деятельность:

@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); 
} 

Поиск коммерсант фрагмент: В этом я хочу, чтобы скрыть меню, или все пункты меню.

@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); 

} 

Как скрыть это меню?

Пожалуйста, помогите .. спасибо ..

+0

http://stackoverflow.com/questions/23178663/hide-show-action-bar-option-menu-item-for-different-fragments/32887678#32887678 – Chandrakanth

+0

Вы можете пройти через следующую ссылку переполнения стека http: //stackoverflow.com/questions/27126336/android-how-to-hide-menu-option-for-current-fragment –

+0

Возможно, вы можете добавить пункт меню программно –

ответ

3

вы можете попробовать это,

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

и

setHasOptionsMenu(true); в OnCreate фрагмента.

ideal setHasOptionsMenu(false); должен работать, но вы можете попробовать другие варианты.

+0

его не работает Я попытался очистить меню и setHasOptionsMenu (false) ;. – Sid

+0

Если вы очищаете меню, вы должны использовать setHasOptionsMenu (true); in oncreate –

+0

спасибо .. сработано .. – Sid