在ActionBarActivity中切换图标

时间:2014-04-30 00:14:19

标签: java android android-appcompat android-actionbar-compat

我正在使用AppCompat_v7库构建Android应用,并且我在操作栏中遇到了麻烦。

我有一个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 个答案:

答案 0 :(得分:0)

您需要使用getMenuInflater来扩充菜单。

您正在为MenuInflater创建一个实例,这是不对的。您必须使用与Activity

关联的实例

将您的onCreateOptionsMenu更改为

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}