2014-04-12 22 views
1

我有一個公共布爾onOptionsItemSelected(MenuItem項目)的問題。onOptionsItemSelected的奇怪行爲

我的代碼:

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"/> 

所以我的問題是,是,如果我選擇一個菜單項,每次另一個會選擇並打開,fe如果我選擇第一個,第二個將被選中,第二個選擇第三個,依此類推。

真正有效的唯一一個是最後一個(action_settings)。

回答

1

我看不出任何明顯的原因,爲什麼會發生這種情況從您提供的代碼,但您的開關/ case語法是不同的。

你寫這樣的:

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; 
} 

這似乎不大可能,但是這可能是問題的根源。希望這可以幫助。

+0

謝謝!無論如何,這和清理我的項目後解決了我的問題。 –

+0

太棒了。不用擔心,我很樂意幫助。 – tpbapp