0

看到这里,我的眼睛都红了:

我使用 ABS 并且在 Android 2.2 下一切正常,但在 ICS 上item.getItemId()总是返回 0。因为item.toString()返回不同的值。我觉得我应该能够解决这个问题,但我总是在信息页面上结束。

public boolean onCreateOptionsMenu(Menu menu) {
    menu.add("Info")
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    menu.add("Preferences")
        .setIcon(R.drawable.ic_preferences)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(item.toString() == "Preferences"){
        Intent intent = new Intent();
        intent.setClass(this,Preferences.class);
        startActivity(intent);
        return true;
    }
    else {
        Intent intent = new Intent();
        intent.setClass(this,Info.class);
        startActivity(intent);
        return true;
    }
}

我想我应该打开item.getItemId(),但我不知道在哪里定义 ActionBar 视图。一段时间以来,我一直对菜单文件夹下的文件 actionbar.xml 感到困惑,但收效甚微:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/preferences" 
        android:showAsAction="always" 
        android:icon="@drawable/ic_preferences"></item>
    <item android:id="@+id/info" 
        android:showAsAction="always"></item>
</menu>

人们应该相信答案相当简单。任何人都可以给我一个正确的方向,从 SDK 版本 7 到 15 的工作方式相同吗?

任何帮助是极大的赞赏。

4

1 回答 1

2

试试这个:

private static final int MENU_INFO = 0;
private static final int MENU_SETTINGS = 1;


@Override
public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0, MENU_INFO, 0, "Info")
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    menu.add(0, MENU_SETTINGS, 0, "Preferences")
        .setIcon(R.drawable.ic_preferences)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

    return true;
}

/* Handles item selections */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case MENU_INFO:
        startActivity(new Intent(this, Info.class));
        return true;
    case MENU_SETTINGS:
        startActivity(new Intent(this, Preferences.class));
        return true;
    }
    return false;
}

诀窍确实是使用item.getItemId();,因为您永远无法确定.toString(). 通过在创建菜单选项时为每个菜单项分配静态 int 引用,您可以知道在 - 方法中单击了哪个菜单项onOptionsItemSelected

于 2012-07-07T15:46:29.103 回答