Android: Как включить / отключить пункт меню выбора при нажатии кнопки?

Я могу легко это сделать, когда я использую onCreateOptionsMenu или onOptionsItemSelected .

Но у меня есть кнопка где-то на экране, и при нажатии этой кнопки она должна включать / отключать элементы контекстного меню.

Благодаря…

Solutions Collecting From Web of "Android: Как включить / отключить пункт меню выбора при нажатии кнопки?"

Во всяком случае, документация охватывает все.

Изменение элементов меню во время выполнения

После создания активности метод onCreateOptionsMenu() вызывается только один раз, как описано выше. Система сохраняет и повторно использует Menu вы определяете в этом методе, до тех пор, пока ваша деятельность не будет уничтожена. Если вы хотите изменить меню параметров в любое время после его создания, вы должны переопределить метод onPrepareOptionsMenu() . Это передает вам объект Menu, как он существует. Это полезно, если вы хотите удалить, добавить, отключить или включить пункты меню в зависимости от текущего состояния вашего приложения.

Например

 @Override public boolean onPrepareOptionsMenu (Menu menu) { if (isFinalized) { menu.getItem(1).setEnabled(false); // You can also use something like: // menu.findItem(R.id.example_foobar).setEnabled(false); } return true; } 

На Android 3.0 и выше меню опций считается всегда открытым, когда пункты меню представлены в панели действий. Когда происходит событие и вы хотите выполнить обновление меню, вы должны вызвать invalidateOptionsMenu() чтобы запросить системный вызов onPrepareOptionsMenu() .

На всех версиях Android самый простой способ: использовать это, чтобы ПОКАЗАТЬ значок действия меню как отключенный И сделать его также отключенным как FUNCTION:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(R.id.menu_my_item); if (myItemShouldBeEnabled) { item.setEnabled(true); item.getIcon().setAlpha(255); } else { // disabled item.setEnabled(false); item.getIcon().setAlpha(130); } } 

Вы можете сохранить элемент как переменную при создании меню параметров, а затем изменить его свойства по своему усмотрению.

 private MenuItem securedConnection; private MenuItem insecuredConnection; @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.connect_menu, menu); securedConnection = menu.getItem(0); insecuredConnection = menu.getItem(1); return true; } public void foo(){ securedConnection.setEnabled(true); } 

Лучшее решение, когда вы выполняете на навигационном ящике

 @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.setGroupVisible(0,false); return true; } 

Упростить версию @Vikas

 @Override public boolean onPrepareOptionsMenu (Menu menu) { menu.findItem(R.id.example_foobar).setEnabled(isFinalized); return true; } 

Как правило, можно изменять свойства ваших просмотров во время выполнения:

 (Button) item = (Button) findViewById(R.id.idBut); 

а потом…

 item.setVisibility(false) 

но

Если вы хотите изменить видимость параметров из ContextMenu, нажмите кнопку, вы можете активировать флаг, а затем в onCreateContextMenu вы можете сделать что-то вроде этого:

  @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle(R.string.context_title); if (flagIsOn()) { addMenuItem(menu, "Option available", true); } else { Toast.makeText(this, "Option not available", 500).show(); } } 

надеюсь, это поможет