Java 为多个活动执行一次选项菜单

Java 为多个活动执行一次选项菜单,java,android,Java,Android,我正在尝试为我的应用程序实现一个选项菜单,相同的菜单用于不同的活动。在报告中,它说: 提示:如果您的应用程序包含多个活动以及其中的一些活动 提供相同的选项菜单,考虑创建一个活动 除了onCreateOptions菜单()和 onOptions ItemSelected()方法。然后为每个类扩展这个类 应共享同一选项菜单的活动。这样,你可以 管理一组用于处理菜单操作和每个子体的代码 类继承菜单行为。如果要将菜单项添加到 子体活动之一,在中重写OnCreateOptions菜单() 这项活动。调用s

我正在尝试为我的应用程序实现一个选项菜单,相同的菜单用于不同的活动。在报告中,它说:

提示:如果您的应用程序包含多个活动以及其中的一些活动 提供相同的选项菜单,考虑创建一个活动 除了onCreateOptions菜单()和 onOptions ItemSelected()方法。然后为每个类扩展这个类 应共享同一选项菜单的活动。这样,你可以 管理一组用于处理菜单操作和每个子体的代码 类继承菜单行为。如果要将菜单项添加到 子体活动之一,在中重写OnCreateOptions菜单() 这项活动。调用super.onCreateOptions菜单(menu),使原始 创建菜单项,然后使用menu.add()添加新菜单项。你 还可以覆盖单个菜单的超类行为 项目

我的活动是从Activity、ListActivity或MapActivity扩展而来的,那么如何正确地实现他们在这里提出的建议呢?可能吗?因为我不能为所有这些扩展这个新类,所以我只能做一些类似于public abstract BaseMenu extends Activity(如中所述)的事情,但这对我不起作用。因此,我想知道是否有一个工作,我可以实现


提前感谢扩展MapActivity类所需的公共基本菜单类。因此,您可以为所有活动扩展公共基菜单类

对于该ListActivity,您也可以在不使用ListActivity的情况下实现列表,您可以仅通过Activity或MapActivity来实现它

您必须在xml文件中声明listview,id如下

 <ListView
            android:id="@+id/listView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>

与上面一样,您可以在不扩展ListActivity的情况下实现它。

如果不扩展mapactivity类,则无法使用mapview。。。。参考这个。。
…所以你应该让你的基类扩展地图活动。。。对于使用listview的活动。。将listview放在xml中,您可以在活动中使用它。

我将创建一个静态MenuProvider类,该类静态实现onCreateOptionsMenu()和onOptionItemsSelected()方法,以便从活动的onCreateOptionsMenu()和onOptionsItemsSelected()调用,如下所示:

public static class MenuProvider {

    // You can pass it the activity and other variables used by this method if 
    //   you need to.
    // Since the implementation is the same across all activities, they should
    //   pass the same variables. 
    public static void onCreateOptionsMenu(MenuItem item, Activity callingActivity, ...)  
       ... // Do stuff on create
    }

    public static void onOptionItemsSelected(MenuItem item, Activity callingActivity, ...)  
       ... // Do stuff on item select
    }
}
在你的每项活动中,你都会:

public class MyMapActivity extends MapActivity {
    ...

    public void onCreateOptionsMenu(MenuItem item)  
       MenuProvider.onCreateOptionsMenu(item, this, ... /*other variables */);
    }

    public static void onOptionItemsSelected(MenuItem item)  
       MenuProvider.onOptionItemsSelected(item, this, ... /*other variables */);
    }

    ...
}

如果在某些活动中不需要映射,那么使用MapActivity而不是Activity是否是一种好方法。我认为它会消耗更多内存。因为我知道map没有map活动是无法实现的,所以对于公共基本菜单选项,这是合适的方式。谢谢,我不知道为什么我以前没有想到这一点:)也许它没有其他实现建议的那么优雅,但我认为它更简单,也不那么混乱,因为我没有在android上编程那么多。onCreateOptionMenu和OnOptionMessage的实现实现了一些东西,比如意图。我已经从Activity扩展了MenuProvider,但是它为这些方法上的修饰符static抛出了一个错误。
public class MyMapActivity extends MapActivity {
    ...

    public void onCreateOptionsMenu(MenuItem item)  
       MenuProvider.onCreateOptionsMenu(item, this, ... /*other variables */);
    }

    public static void onOptionItemsSelected(MenuItem item)  
       MenuProvider.onOptionItemsSelected(item, this, ... /*other variables */);
    }

    ...
}