什么是控制“Android中的菜单项”ActionBar的最佳(最有效或最传统)方式?

时间:2014-06-09 18:42:09

标签: android android-menu

在控制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。这感觉不是很传统或有效(我可能会补充一个非常科学的观察)。有更传统或更有效的方法吗?

2 个答案:

答案 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));
 }