不要重复菜单代码

时间:2013-04-02 22:49:36

标签: android menu

我想为我的所有活动只提供一个菜单。我不想在我的所有活动中重复我的菜单代码(下面)。

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case R.id.action_settings:
        System.out.println("set");
        return true;
    case R.id.action_alert:
        System.out.println("alert");
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

我读了一些主题,但我发现只有一个解决方案就是扩展声明菜单的父类。我无法使用此解决方案,因为我的所有活动都没有扩展活动,我还有FragmentActivityListActivity

是否有解决方案在每个活动上使用相同的菜单为每个活动编写最少的代码?

2 个答案:

答案 0 :(得分:4)

根据菜单处理代码需要从当前活动访问的内容,您可以创建一个类,其唯一的责任是处理所选的菜单项。可能只有一个接收MenuItem的静态方法。

例如,修改onOptionsItemSelected为:

的活动
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    boolean handled = MenuHandler.onOptionsItemSelected(item); 
    if (!handled) {
        handled = super.onOptionsItemSelected(item);
    }
    return handled;
}

并创建MenuHandler类:

public class MenuHandler {
    public static boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle item selection
        switch (item.getItemId()) {
        case 1: //R.id.action_settings:
            System.out.println("set");
            return true;
        case 2: //R.id.action_alert:
            System.out.println("alert");
            return true;
        default:
            return false;   //allow default processing
        }
    }
}

答案 1 :(得分:0)

您需要的只是从主类扩展

public abstract class main extends activity(){
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// put your common menu code

super.onOptionsItemSelected(item);
}

}
public class HelloActivity extends main{
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
}
}