Переключение значков в ActionBarActivity
Я создаю приложение для Android с использованием библиотеки AppCompat_v7, и у меня возникают проблемы с панелью действий.
У меня есть AppBarActivity, которая расширяет ActionBarActivity - я использую одну и ту же панель действий для всех своих действий. MainActivity расширяет AppBarActivity. Я определил четыре иконки панели действий, две из которых я хотел бы отображать одновременно. Я был осторожен, чтобы определить свое собственное пространство имен, т.е. app:showAsAction="always"/>
В моем приложении я переключаю видимость этих значков в onPrepareOptionsMenu()
MenuItem contactOn = menu.findItem(R.id.contact_toggle_button_on);
MenuItem contactOff = menu.findItem(R.id.contact_toggle_button_off);
contactOn.setVisible(!useContacts);
contactOn.setEnabled(!useContacts);
contactOff.setVisible(useContacts);
contactOff.setEnabled(useContacts);
Нужно ли здесь как-то указывать пространство имен? Потому что не похоже, что эти методы делают что-либо, кроме, как ни странно, перераспределения их имен в списке переполнения. Кроме того, только три из четырех кнопок отображаются там, что я тоже не понимаю, но я ожидаю, что это другая проблема.
ОБНОВЛЕНИЕ: размещение кода и XML
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inf = new MenuInflater(this);
inf.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem contactOn = menu.findItem(R.id.contact_toggle_button_on);
MenuItem contactOff = menu.findItem(R.id.contact_toggle_button_off);
contactOn.setVisible(!useContacts);
contactOn.setEnabled(!useContacts);
contactOff.setVisible(useContacts);
contactOff.setEnabled(useContacts);
MenuItem locationOn = menu.findItem(R.id.location_toggle_button_on);
MenuItem locationOff = menu.findItem(R.id.location_toggle_button_off);
locationOn.setVisible(useLocation);
locationOn.setEnabled(useLocation);
locationOff.setVisible(!useLocation);
locationOff.setEnabled(!useLocation);
return true;
}
И XML
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.skortchm.strangerapp.MainActivity" >
<!-- Contacts Toggle, should appear as action button -->
<item
android:id="@+id/contact_toggle_button_on"
android:icon="@drawable/ic_action_call"
android:title="@string/contact_toggle_on"
app:showAsAction="always"/>
<item
android:id="@+id/contact_toggle_button_off"
android:icon="@drawable/ic_action_call_off"
android:title="@string/contact_toggle_off"
app:showAsAction="always"/>
<!-- Location Toggle, should appear as action button -->
<item
android:id="@+id/location_toggle_button_on"
android:icon="@drawable/ic_action_location_searching"
android:title="@string/location_toggle_on"
app:showAsAction="always"/>
<item
android:id="@+id/location_toggle_button_off"
android:icon="@drawable/ic_action_location_off"
android:title="@string/location_toggle_off"
app:showAsAction="always"/>
<!-- Settings, should always be in the overflow -->
<!-- Add gear icon here -->
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
1 ответ
Вам нужно использовать getMenuInflater
раздувать меню.
Вы создаете экземпляр для MenuInflater
, это неправильно. Вы должны использовать экземпляр, связанный с Activity
Измени свой onCreateOptionsMenu
как
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}