2013-12-22 47 views
2

在了Android的onOptionsItemSelected()方法菜單,我打電話了一個名爲getQueries()方法,這將決定複選框被選中什麼,然後返回基於一個字符串。但是,每當我嘗試訪問菜單中的項目時,我都會收到一個空引用值。有任何想法嗎?我的getQueries方法在下面,如果需要,我可以提供更多的代碼。我想我可能會初始化菜單錯誤,但我無法弄清楚。提前致謝。訪問Android的菜單項目

public String getQueries() { 

    String q = ""; 
    Menu menu = (Menu)findViewById(R.menu.main_activity_actions); 
    if (menu.findItem(R.id.action_bread).isChecked()) { 
     q = "bread"; 
    } 
    if (menu.findItem(R.id.action_cheese).isChecked()) { 
     q = "cheese"; 
    } 
    Log.d("query", q); 
    return q; 
} 

回答

1

爲了使您的代碼的工作:從onMnuItemSelected

public String getQueries(MenuItem itm) 
{ 
    String q = ""; 

    switch (itm.getItemId()) 
    { 
     case R.id.action_bread: 
     { 
      q = "bread"; 
      break; 
     } 
     case R.id.action_bread: 
     { 
      q = "cheese"; 
      break; 
     } 
    } 

    Log.d("query", q); 
    return q; 
} 

把它傳遞的菜單項作爲參數。

但我更願意做,所以:
(在宣佈•作爲局部變量)

@Override 
public final boolean onMenuItemSelected 
(final int featureId, final MenuItem itm) 
{ 
    String q = ""; 

    switch (itm.getItemId()) 
    { 
     case R.id.action_bread: 
     { 
      q = "bread"; 
      break; 
     } 
     case R.id.action_bread: 
     { 
      q = "cheese"; 
      break; 
     } 
    } 
    Log.d("query", q); 

    return super.onMenuItemSelected(featureId, itm); 
} 
+0

感謝克勞斯的幫助。我正在嘗試做的是檢查菜單中所有複選框的值,以便根據選中的複選框形成一個包含多個查詢的字符串。有關於此的任何想法?我不知何故需要迭代菜單項,檢查它們是否被選中,然後在檢查它們時追加字符串。 – johns4ta

+0

你可以做到這一點,並且更容易:批准一些布爾變量,每個布爾變量對應一個MenuItem選中或不選,然後 - 當你點擊一個按鈕時(例如),你準備基於這些值的查詢。 DONE! –

+0

看起來我會採取這種方法。謝謝! – johns4ta

1

可以存儲到您MenuonCreateOptionsMenu()參考和以後使用它。 findViewById(R.menu.whatever)返回null

+0

正確的,空引用是在問題發生。所以我需要創建全局變量並將它們分配給onCreateOptionMenu(),然後我可以稍後在代碼中引用它們? – johns4ta