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 ビューを定義する場所がわかりません。しばらくの間、menu フォルダーの下にあるファイル 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-reference を割り当てることで、メソッドでどれがクリックされたかがわかりますonOptionsItemSelected

于 2012-07-07T15:46:29.103 に答える