2

我希望我的所有活动只有一个菜单。我不想在所有活动中重复我的菜单代码(如下)。

@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);
    }
}

我阅读了一些主题,但我发现只有一个解决方案是扩展声明菜单的父类。我不能使用这个解决方案,因为我所有的活动都没有扩展 Activity,我也有FragmentActivityand ListActivity

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

4

2 回答 2

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
        }
    }
}
于 2013-04-03T00:51:19.587 回答
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);
}
}
于 2013-04-02T23:30:32.613 回答