Android SubMenus ничего не делает при нажатии - PullRequest
2 голосов
/ 12 декабря 2011

Я чувствую, что это может быть глупым вопросом, но я понятия не имею, что делать.

У меня есть меню, которое работает правильно. Один из пунктов меню: «Поиск» вызывает подменю с различными элементами, такими как «Ресторан», «Кафе» и т. Д.

Ниже приведен код XML для создания меню и подменю:

<?xml version="1.0" encoding="utf-8"?>
<menu 
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_entry"
      android:title="@string/new_entry"
      android:icon="@drawable/add_new">
</item>
 <item android:id="@+id/search"
      android:title="@string/search"
      android:icon="@drawable/search">
      <menu>
        <item android:id="@+id/five"
        android:title="@string/five">
        </item>
        <item android:id="@+id/ten"
        android:title="@string/ten">
        </item>
        <item android:id="@+id/fifteen"
        android:title="@string/fifteen">
        </item>
        <item android:id="@+id/restaurant"
        android:title="@string/restaurant">
        </item>
        <item android:id="@+id/cafe"
        android:title="@string/cafe">
        </item>
        <item android:id="@+id/sandwich"
        android:title="@string/sandwich">
        </item>
      </menu>
</item>
<item android:id="@+id/info"
      android:title="@string/info_short"
      android:icon="@drawable/info">
 </item>

Тогда в моем классе деятельности у меня есть:

// Initialise Menu.
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_services, menu);
    return true;
}

и

// Create cases for each menu selection.
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.new_entry:
            createFood();
            return true;
        case R.id.search:
            return true;
        case R.id.cafe:
            Log.d(TAG, "In Cafe SubMenu");
            Toast.makeText(getApplicationContext(), TAG, Toast.LENGTH_SHORT);
            return true;
        case R.id.info:
            info();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Каждый случай в «onOptionsItemSelected» делает то, что должен делать, кроме «case R.id.cafe:», которое является подменю. Здесь он должен публиковать сообщения в LogCat и Toast для тестирования, но ничего не делает.

Чего мне не хватает?

Спасибо

Ответы [ 2 ]

2 голосов
/ 13 февраля 2014

Я попробовал ваш код, и он работает отлично.Только тост не отображается, когда я выбираю «кафе».Это потому, что вы не вызывали show() в своем коде.Ваш код

Toast.makeText(getApplicationContext(), TAG, Toast.LENGTH_SHORT);

, чтобы показать тост во время выполнения, он должен вызываться следующим образом

Toast.makeText(getApplicationContext(), TAG, Toast.LENGTH_SHORT).show();

:)

0 голосов
/ 13 февраля 2014

Я думаю, вам следует удалить следующие строки:

case R.id.search:
    return true;
...