У меня есть панель действий с меню. Когда вы нажимаете кнопку, появляется меню, и все хорошо с миром.Программно отображать переполнение панели действий
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/reload"
android:title="@string/reload"
android:alphabeticShortcut="r"
android:numericShortcut="1"
android:titleCondensed="Rload"></item>
<group android:id="@+id/adv" android:menuCategory="secondary">
...options
</group>
</menu>
Однако, я только что сказал, что у нас есть клиент, устройство которого имеет какое-то другой строку меню, которое отображается над текущим, так что они не могут получить доступ к меню. Поэтому я добавил кнопку в веб-браузере с помощью javascriptinterface, чтобы сообщить моей активности о программном отображении меню. Я могу получить там просто отлично, но я не могу на всю жизнь понять, как отобразить меню, как будто нажата кнопка меню.
Я пытался сделать что-то вроде этого:
private void showMenu() {
try{
actionbar.show();
MenuItem menu = (MenuItem) findViewById(R.id.adv);
menu.expandActionView();
}
catch(Exception e){
Log.e(LOG_CAT,"Unable to inflate menu");
}
}
, но я получаю исключения нулевого указателя
java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.MenuItem.expandActionView()' on a null object reference
Похоже, что я пытаюсь сделать, должно быть тривиально просто, но возможно, я просто делаю что-то безгласное.
EDIT Я на самом деле не хочу, чтобы просто показать R.id.adv, я хотел бы показать все меню, так что, вероятно, следует findViewById(R.menu.menu_main)
вместо этого, где menu_main
это имя файла, который выше XML определяется в.
Это имеет смысл для меня, но menu.findItem (R.id.adv); по-прежнему возвращает нулевой объект. Глядя на объект в отладчике, кажется, что объект меню, который я получаю в onCreateOptionsMenu, на самом деле является объектом, который я хочу отобразить. –
@ S.Buda Вы уверены, что 'showMenu' не вызывается до создания меню? – Simas
Да. 'showMenu' вызывается только тогда, когда пользователь нажимает определенную кнопку, но' onCreateOptionsMenu' вызывается при запуске приложения. –