Ajay Shrestha
Ajay Shrestha

Reputation: 2455

How to click disabled option menu item in Toolbar android?

I have two option items in a Toolbar. When one item is clicked, that item will be enabled. Then another item must be disabled. But, once the item was disabled I can't fire click event anymore on that item. Is there anyway that I can click on the disable item?

Thank you

enter image description here

I did like this but its not working anymore

 MenuItem tureMenuItem;
 MenuItem dingMenuItem

 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.clear();
   getActivity().getMenuInflater().inflate(R.menu.lore_fragment, menu);
   tureMenuItem = menu.findItem(R.id.menu_ture);
   dingMenuItem = menu.findItem(R.id.menu_ding);
   tureMenuItem.setEnabled(true);
   dingMenuItem.setEnabled(false);


}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_ding:
            tureMenuItem.setEnabled(true);
            dingMenuItem.setEnabled(false);
            break;
        case R.id.menu_ture:
            tureMenuItem.setEnabled(false);
            dingMenuItem.setEnabled(true);
            break;
    }
    return super.onOptionsItemSelected(item);
}

Upvotes: 1

Views: 1447

Answers (2)

Sree Reddy Menon
Sree Reddy Menon

Reputation: 1311

Using setEnabled() will work. manage with your conditions.

you must be doing some action on those menu items right. You can enable the other item at the end of action.since you have not posted I have only option. Using Handler.PostDelayed.

 boolean isMenuEnabled;
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if(item.getItemId()==R.id.action_settings) {

                    this.isMenuEnabled = true;

                    tureMenuItem.setEnabled(true);
                    dingMenuItem.setEnabled(false);
             handler.postDelayed(runnable,1000);
                    return true;
            }
            else if(item.getItemId()== R.id.action_settings1) {

                this.isMenuEnabled = true;

                tureMenuItem.setEnabled(false);
                dingMenuItem.setEnabled(true);
                handler.postDelayed(runnable,1000);
                return true;
            }



        return super.onOptionsItemSelected(item);
    }

remove the callbacks

@Override
    protected void onDestroy() {

        handler.removeCallbacks(runnable);
        super.onDestroy();
    }

runnable with delay

Runnable runnable = new Runnable() {
        @Override
        public void run() {
            if(isMenuEnabled){
                tureMenuItem.setEnabled(true);
                dingMenuItem.setEnabled(true);
                isMenuEnabled=false;
            }

        }
    };

Upvotes: 1

pRaNaY
pRaNaY

Reputation: 25320

You need to check below example code to disable and enable menu item vice-versa.

   @Override
   public boolean onPrepareOptionsMenu(Menu menu) 
   {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.my_menu, menu);      
     if(menu.getItem(0))
        {
        menu.getItem(0).setEnable(false);
        menu.getItem(1).setEnable(true); 
        }
     else if(menu.getItem(1))
       {
        menu.getItem(1).setEnable(false);
        menu.getItem(0).setEnable(true); 
       }        

    return super.onPrepareOptionsMenu(menu);
  }

Upvotes: 0

Related Questions