Я легко могу это сделать, когда использую методы onCreateOptionsMenu
или onOptionsItemSelected
.
Но у меня есть кнопка где-то на экране, и при нажатии на эту кнопку она должна включать / отключать элементы контекстного меню.
источник
Я легко могу это сделать, когда использую методы 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()
.
setEnable()
меняет то, что происходит при нажатии на это меню, но не меняет его внешний вид (что не так, разработчики Android?). Так что понятнее либо отключить и изменить заголовок, либо, желательно, просто сделатьMenuItem
невидимым.false
чтобы полностью отключить меню.Во всех версиях Android самый простой способ: используйте это, чтобы ПОКАЗАТЬ значок действия в меню как отключенный И сделать его ФУНКЦИОНАЛЬНЫМ как отключенным:
источник
Вы можете сохранить элемент как переменную при создании меню параметров, а затем изменить его свойства по желанию.
источник
onPrepareOptionsMenu
?упростить версию @Vikas
источник
Как обновить текущее меню, чтобы включить или отключить элементы после выполнения AsyncTask.
В моем случае мне нужно было отключить меню, пока моя AsyncTask загружала данные, а затем после загрузки всех данных мне нужно было снова включить все меню, чтобы пользователь мог его использовать.
Это не позволяло приложению разрешать пользователям нажимать на пункты меню во время загрузки данных.
Сначала я объявляю переменную состояния, если переменная равна 0, отображается меню, если эта переменная равна 1, меню скрыто.
Затем в моем
onCreateOptionsMenu()
я проверяю эту переменную, если это 1, я отключаю все свои элементы, если нет, я просто показываю их всеТеперь, когда мой Activity запускается,
onCreateOptionsMenu()
он будет вызываться только один раз, и все мои элементы исчезнут, потому что я установил для них состояние в начале.Затем я создаю AsyncTask, где устанавливаю для этой переменной состояния значение 0 в моем
onPostExecute()
Этот шаг очень важен!
Когда вы позвоните,
invalidateOptionsMenu();
он перезапуститсяonCreateOptionsMenu();
Итак, после установки моего состояния на 0 я просто перерисовываю все меню, но на этот раз с моей переменной на 0, при этом все меню будет отображаться после завершения всего асинхронного процесса, а затем мой пользователь может использовать меню ,
Полученные результаты
источник
лучшее решение, когда вы работаете с навигационным ящиком
источник
Более современный ответ на старый вопрос:
MainActivity.kt
menu_main_activity.xml
menu_item_icon_selector.xml
attrs.xml
styles.xml or themes.xml
источник
источник
Я сохранил ссылку на меню в
onCreateOptionsMenu
. Это похоже на ответ nir, за исключением того, что вместо сохранения каждого отдельного элемента я сохранил все меню.Объявить меню
Menu toolbarMenu;
.Затем
onCreateOptionsMenu
сохраните меню в своей переменнойТеперь вы можете получить доступ к своему меню и всем его элементам в любое время.
toolbarMenu.getItem(0).setEnabled(false);
источник
источник
Если отображается меню
Если скрыть меню
источник
Как правило, можно изменить свойства ваших представлений во время выполнения:
а потом...
но
если вы хотите изменить видимость параметров из ContextMenu, при нажатии кнопки вы можете активировать флаг, а затем в onCreateContextMenu вы можете сделать что-то вроде этого:
надеюсь, это поможет
источник
onCreateContextMenu
методе. Но я хочу получить доступ к контекстному меню вне этого метода.onCreateContextMenu
будет вызываться только один раз, но я могу нажимать кнопку много времени, чтобы включить / отключить пункт меню.