Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Don';不要重复菜单代码_Android_Menu - Fatal编程技术网

Android Don';不要重复菜单代码

Android Don';不要重复菜单代码,android,menu,Android,Menu,我只想要一份我所有活动的菜单。我不想在所有活动中重复我的菜单代码(如下) @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.referent, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle ite

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

@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);
    }
}
我读了一些主题,但我发现只有一个解决方案是扩展声明菜单的父类。我无法使用此解决方案,因为我的所有活动都不是扩展活动,我还有
FragmentActivity
ListActivity


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

您所需要的只是从一个主类进行扩展

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

您所需要的只是从一个主类进行扩展

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

根据菜单处理代码需要从当前活动访问的内容,您可以创建一个类,该类的唯一职责是处理选定的菜单项。甚至可能只使用一个静态方法来接收
MenuItem

例如,修改活动,使选择的选项项为:

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

根据菜单处理代码需要从当前活动访问的内容,您可以创建一个类,该类的唯一职责是处理选定的菜单项。甚至可能只使用一个静态方法来接收
MenuItem

例如,修改活动,使选择的选项项为:

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

看看这个-谢谢,但是在你的链接中,他们使用的是扩展或片段,出于兼容性的原因,我不想使用片段。关于组合而不是继承呢?只需将
和其他需要的参数传递给另一个具有公共逻辑的对象中的方法。如果您担心兼容性,您可能还不想排除使用片段的可能性。在我的应用程序中使用。实现非常简单,在我看来,如果你想实现片段的一些好处(比如以独特的方式支持不同的屏幕大小等),那么最好从一开始就使用片段来编写应用程序,而不是在将来转换基于活动的代码.看一看这个-谢谢,但是在你的链接中,他们使用的是扩展或片段,出于兼容性原因,我不想使用片段。合成而不是继承怎么样?只需将
和其他需要的参数传递给另一个具有公共逻辑的对象中的方法。如果您担心兼容性,您可能还不想排除使用片段的可能性。在我的应用程序中使用。实现非常简单,在我看来,如果你想实现片段的一些好处(比如以独特的方式支持不同的屏幕大小等),那么最好从一开始就使用片段来编写应用程序,而不是在将来转换基于活动的代码.他在问题中明确表示他不能使用
活动
类的子类。他在问题中明确表示他不能使用
活动
类的子类。