Android SubMenus在点击时没有做任何事情

时间:2011-12-12 03:25:46

标签: android android-menu

我觉得这可能是一个愚蠢的问题,但我不知道该怎么做。

我有一个正常的菜单。菜单中的一个项目:“搜索”会显示一个子菜单,其中包含“餐厅”,“咖啡厅”等不同的项目。

以下是用于创建菜单和子菜单的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 个答案:

答案 0 :(得分:2)

我已经尝试过您的代码,但它运行正常。当我选择'cafe'时,只显示Toast。这是因为您没有在代码中调用show()。你的代码是

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

在运行时显示吐司,它应调用如下

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

:)

答案 1 :(得分:0)

我认为你应该删除以下几行:

case R.id.search:
    return true;