我正在尝试为我的应用程序实现选项菜单,并且在不同的活动中使用相同的菜单。在Android developers site中,它说明了以下内容:
提示:如果您的应用程序包含多个活动及其中一些活动 提供相同的选项菜单,考虑创建一个活动 除了onCreateOptionsMenu()和之外什么都不做 onOptionsItemSelected()方法。然后为每个扩展此类 应该共享相同选项菜单的活动。这样,你就可以 管理一组用于处理菜单操作和每个后代的代码 class继承了菜单行为。如果要添加菜单项 其中一个后代活动,覆盖onCreateOptionsMenu() 那个活动。调用super.onCreateOptionsMenu(菜单)这样原来的 创建菜单项,然后使用menu.add()添加新菜单项。您 也可以覆盖单个菜单的超类的行为 项目
我的活动是从Activity,ListActivity或MapActivity延伸出来的,那么实现他们在这里提出建议的正确方法是什么?可能吗?因为我无法为所有这些扩展这个新类,所以我只能做类似公共抽象的BaseMenu扩展Activity(如this question中所述),但这对我不起作用。所以我想知道是否有可以实施的工作。
提前致谢
答案 0 :(得分:2)
对于那个常见的Base菜单类,您需要扩展MapActivity类。因此,您可以为所有活动扩展该公共基本菜单类。
对于ListActivity,您也可以在没有ListActivity的情况下实现列表,只能通过Activity或MapActivity实现它。
你必须在xml文件中声明listview,其ID如下所示。
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
然后你必须在你的活动类中声明它。
ListView listView = (ListView)findViewById(R.id.listView);
listView.setAdapter(your adapter);
如上所述,您可以在不扩展ListActivity的情况下实现它。
答案 1 :(得分:1)
如果不扩展mapactivity类,你就不能使用mapview ....请参考这个.. MapView without MapActivity ..所以你应该让你的基类扩展地图活动...和使用listview的活动..把listview放在xml中你可以在你的活动中使用它..
答案 2 :(得分:0)
我将创建一个静态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 */);
}
...
}