我需要在前一個屏幕(Activity)返回時啓用MenuItem。Android - 通過代碼啓用MenuItems
我嘗試這樣的代碼:
... ((菜單項)findViewById(R.id.menu_how))的setEnabled(真); ...
但啓動了空指針異常。
順便說一句,menu_how在xml中設置爲false;並且代碼是onActivityResult(int requestCode,int resultCode,Intent數據)調用的一部分。
我需要在前一個屏幕(Activity)返回時啓用MenuItem。Android - 通過代碼啓用MenuItems
我嘗試這樣的代碼:
... ((菜單項)findViewById(R.id.menu_how))的setEnabled(真); ...
但啓動了空指針異常。
順便說一句,menu_how在xml中設置爲false;並且代碼是onActivityResult(int requestCode,int resultCode,Intent數據)調用的一部分。
你在哪兒打這個電話?
(對不起,沒有仔細閱讀)我認爲你需要在菜單充值後調用它(通常在OnCreateOptionsMenu中)。爲此,您可以在其他Activity返回時將變量設置爲true,然後在調用inflater.inflate之後在OnCreateOptionsMenu中執行((MenuItem)findViewById(R.id.menu_how)).setEnabled(mMyBooleanField)
。
編輯:在代碼中做到這一點,它可能是這個樣子:
在類的頂部(連同所有其他類成員):
Boolean mEnableMenuItem = false;
在OnCreateOptionsMenu:
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_main, menu); ((MenuItem)findViewById(R.id.menu_how)).setEnabled(mEnableMenuItem);
在OnActivityResult:
mEnableMenuItem = true;
我發現在Android開發site的東西,可能是有益的(尋找節「在運行時更改菜單項」)
它說,僅在創建該活動的菜單中onCreateOptionsMenu()
法進行燒結,和它發生在這個活動開始時。因此,如果您想在菜單/活動創建後更改菜單項,則需要覆蓋onPrepareOptionsMenu()
方法。搜索鏈接的全部細節。
編輯:
剛做出來,它工作正常。我使用的每個menuItem
使用一個boolean var
,它表示是否應該啓用此項目。這是我的代碼:使用onCreateOptionsMenu menu.findItem(R.id.menu_how)
並保存供以後使用的參考
/*************************************Game Menu**************************************/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId())
{
case R.id.gm_new_game:
//newGame();
return true;
case R.id.gm_stand_up:
//some code when "gm_stand_up" button clicked..
return true;
case R.id.gm_forfeit:
//some code when "gm_forfeit" button clicked..
return true;
case R.id.gm_surrender:
//some code when "gm_surrender" button clicked..
return true;
case R.id.gm_exit_table:
exitTableCommand();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
menu.findItem(R.id.gm_forfeit).setEnabled(forfeitMenuButtonIsEnabled);
menu.findItem(R.id.gm_surrender).setEnabled(surrenderMenuButtonIsEnabled);
menu.findItem(R.id.gm_new_game).setEnabled(newGameMenuButtonIsEnabled);
menu.findItem(R.id.gm_stand_up).setEnabled(standUpMenuButtonIsEnabled);
return super.onPrepareOptionsMenu(menu);
}
感謝您的回答。我會試試看。 – mauricio 2011-04-13 06:24:30
嘗試。
這應該與enabled
正常工作,但是,我發現設置一個菜單項在XML中不可見意味着您不能以編程方式顯示/隱藏它。
請您的活動菜單的引用:
private Menu mMenu;
然後:
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_note, menu);
mMenu = menu;
return true;
}
現在,在您的活動在任何地方訪問菜單項使用相似的代碼如下:
mMenu.findItem(R.id.menu_how).setVisible(false);
或
mMenu.findItem(R.id.menu_how).setEnabled(true);
感謝您的回答,但是,我想要做的是根據某些條件啓用我的MenuItem。這個條件是從另一個activity獲得的,所以我在onActivityResult(int requestCode,int resultCode,Intent data)代碼中包含了((MenuItem)findViewById(R.id.menu_how))。setEnabled = true。這導致空指針異常。 – mauricio 2010-08-19 09:29:56
這就是上述答案的成就。事情是,我不認爲你可以直接在onActivityResult中設置它,你需要使用變量間接設置它。我將通過代碼實現更新我的答案,使其更具體一些。 – QRohlf 2010-08-19 16:08:10