onOptionsItemSelected的奇怪行为

时间:2014-04-12 17:43:38

标签: java android

我遇到了公共布尔值onOptionsItemSelected(MenuItem项)的问题。

我的代码:

public boolean onOptionsItemSelected(MenuItem item) 
{
    switch(item.getItemId())
    {
        case R.id.action_timetable:
        {
            wbViewTimetable.setInitialScale(200);
            loadTimetable();       
            break;              
        }
        case R.id.action_map_eg:
        {               
            wbViewTimetable.setInitialScale(100);
            wbViewTimetable.loadUrl("file:///android_asset/floor_plan_eg.png");
            break;
        }
        case R.id.action_map_og:
        {
            wbViewTimetable.setInitialScale(100);
            wbViewTimetable.loadUrl("file:///android_asset/floor_plan_og.png");
            break;
        }
    }
    return true;
}

我的main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" >


<item android:id="@+id/action_timetable" 
    android:title="Timetable"/>

<item android:id="@+id/action_map_eg" 
     android:title="Map 2" />

<item android:id="@+id/action_map_og" 
      android:title="Map 1"/>

<item android:id="@+id/action_settings"
      android:title="Settings" 
      android:orderInCategory="100"/>

所以我的问题是,如果我选择菜单条目,每次选择并打开另一个菜单条目时,f.e。如果我选择第一个,第二个将被选中,第二个将被选中,依此类推。

真正唯一有效的是最后一个(action_settings)。

1 个答案:

答案 0 :(得分:1)

我看不出任何明显的原因,为什么会从您提供的代码中发生这种情况,但是您的开关/案例语法不同。

你写得像这样:

switch(item.getItemId()) {
    case R.id.action_timetable:
    {
        // ...
        break;
    }
    case R.id.action_map_eg:
    {
        // ...
        break;
    }
}
return true;
我是这样写的:

switch(item.getItemId()) {
    case R.id.action_timetable:
        // ...
        return true;
    case R.id.action_map_eg:
        // ...
        return true;
}

似乎不太可能,但这可能是问题的根源。希望这会有所帮助。