Переключение значков в 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;
}
Другие вопросы по тегам