Лучший способ скрыть все элементы в меню только одной командой - использовать «группу» в вашем меню xml. Просто добавьте все пункты меню, которые будут в вашем меню переполнения внутри одной группы.
В этом примере мы имеем два пункта меню, которые всегда будут показывать (постоянный пункт и поиск) и три проточных пункты:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/someItemNotToHide1"
android:title="ITEM"
app:showAsAction="always" />
<item
android:id="@+id/someItemNotToHide2"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="collapseActionView|ifRoom"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
<group android:id="@+id/overFlowItemsToHide">
<item android:id="@+id/someID"
android:orderInCategory="1" app:showAsAction="never" />
<item android:id="@+id/someID2"
android:orderInCategory="1" app:showAsAction="never" />
<item android:id="@+id/someID3"
android:orderInCategory="1" app:showAsAction="never" />
</group>
</menu>
Тогда на вашей деятельности (желательно на onCreateOptionsMenu), используйте команду setGroupVisible для установки все видимые пункты меню - false или true.
public boolean onCreateOptionsMenu(Menu menu) {
menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}
Если вы хотите использовать эту команду в любом другом месте вашей деятельности, не забудьте сохранить класс меню местных, и всегда проверяйте, если меню имеет нулевое значение, потому что вы можете выполнить, прежде чем createOptionsMenu:
Menu menu;
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
}
public void hideMenus() {
if (menu != null) menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}
Это то, что я думал изначально, но это приводит к сбою приложения. –
@Stir Zoltán: Ну, вот как вы это делаете, возможно, вы ошибетесь, если это сбой приложения. Например, ваш 'MenuItem' может быть' null', потому что вы используете 'getItem' вместо' findItem'. Мы никогда не узнаем, не увидев как ваш код, так и журнал сбоев. –
Обновлен вопрос. –