在所有活动中显示菜单,而不是每次都覆盖onCreateOptionsMenu和onOptionsItemSelected

时间:2015-10-15 04:32:58

标签: android

在使用我的应用程序时,我不得不遇到一种情况,我应该使用菜单,当用户单击菜单按钮时,该菜单必须在整个应用程序中显示。
所以我在默认活动中使用了以下代码,但后来意识到该菜单正在该活动中显示,但并非全部显示。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.del_boy_menu, menu);
    //below comented code for changung dynamically
    // MenuItem bedMenuItem = menu.findItem(R.id.home);
    // bedMenuItem.setTitle("title changed");
    // System.out.println("onCreate executed");
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    System.out.println("onOptionSelected executed");
    switch (item.getItemId()) {
        case R.id.home:
            // Single menu item is selected do something
            // Ex: launching new activity/screen or show alert message
            Toast.makeText(MainDeliveryBoyActivity.this, "Home is Selected", Toast.LENGTH_SHORT).show();
            // MenuHomeActivity
            startActivity(new Intent(context,MenuHomeActivity.class));
            return true;

        case R.id.delivered1:
            Toast.makeText(MainDeliveryBoyActivity.this, "delivered is Selected", Toast.LENGTH_SHORT).show();
            return true;

        case R.id.cancelled:
            Toast.makeText(MainDeliveryBoyActivity.this, "cancelled is Selected", Toast.LENGTH_SHORT).show();
            return true;

        case R.id.active:
            Toast.makeText(MainDeliveryBoyActivity.this, "active is Selected", Toast.LENGTH_SHORT).show();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

所以我的问题是我应该在所有活动中复制并粘贴上述所有代码吗?还是有办法让我跳过这个?

2 个答案:

答案 0 :(得分:2)

创建一个名为BaseActivity的全局活动,并使所有活动扩展它。

public class BaseActivity extends AppCompatActivity{
    public void onCreate(Bundle iCreate){
        ...
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.del_boy_menu, menu);
        ....
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        ....
    }
}

现在所有其他活动都应该扩展BaseActivity,因此您不必每次都编写代码来扩充菜单。

public class Activity1 extends BaseActivity{
    ....
}

答案 1 :(得分:1)

我相信每个活动都有一个独特的菜单。但是有一种方法可以做你想在这里实现的东西。

  • 您可以创建一个继承自Activity类的基类,并将所有菜单逻辑放在该基类上。

您还可以参考此答案,Reuse the Action Bar in all the activities of appthis article

PS:我不赞成答案,我只是想帮忙。干杯!