在控制MenuItem时,我一直这样做:
Menu menu;
(...)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
this.menu = menu;
return true;
}
(...)
public void handleSearch(View view) {
Button button = (Button) view;
if(menu.findItem(R.id.action_search).isVisible()) {
button.setText(R.string.button_search_show);
menu.findItem(R.id.action_search).setVisible(false);
} else {
button.setText(R.string.button_search_hide);
menu.findItem(R.id.action_search).setVisible(true);
}
}
“this”引用onCreateOptionsMenu中创建的菜单,其中包含类中任何方法都可以使用的Menu。 handleSearch方法使用findItem两次控制MenuItems。这感觉不是很传统或有效(我可能会补充一个非常科学的观察)。有更传统或更有效的方法吗?
答案 0 :(得分:1)
您可以将MenuItem保存在变量中,而不是使用findItem两次。
MenuItem myMenuitem = menu.findItem(R.id.action_search);
答案 1 :(得分:0)
有一种处理actionBar菜单本身的方法。
试试这个:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
super.onBackPressed();
return (true);
case R.id.menu_home:
Intent i = new Intent(this, HomeActivity.class);
startActivity(i);
return (true);
}
return (super.onOptionsItemSelected(item));
}