Я могу легко это сделать, когда я использую onCreateOptionsMenu
или onOptionsItemSelected
.
Но у меня есть кнопка где-то на экране, и при нажатии этой кнопки она должна включать / отключать элементы контекстного меню.
Благодаря…
Во всяком случае, документация охватывает все.
После создания активности метод
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(); } }
надеюсь, это поможет