2011-12-12 2 views
2

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

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

Ниже код 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

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

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

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

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

:)

0

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

case R.id.search: 
    return true; 
Смежные вопросы