ActionBarSherlock和ICS

时间:2012-07-07 15:42:31

标签: android android-4.0-ice-cream-sandwich actionbarsherlock

我盯着我的眼睛发红了:

我使用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 Views的定义。有一段时间我对菜单文件夹下的文件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之间的方法上给出正确的方向吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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-reference,您可以知道在onOptionsItemSelected - 方法中单击了哪一个。