有没有一种方便的方法可以在多个 Activity 中显示相同的选项菜单选项?
示例:在我的应用中,我以三种方式之一显示电视指南。
- 7 天指南(带有 7 个标签的 TabActivity)
- 所有 channel “正在展示”(ListActivity)
- 今天开始时间的所有节目( Activity - 可以轻松更改为 ListActivity)
对于TabActivity
中的Options菜单,代码很简单...
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
menu.clear();
inflater.inflate(R.menu.gv_options_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.view:
...
...
}
}
...但目前我似乎需要将它复制/粘贴到我不喜欢做的其他两个 Activity 中。如果我更改其中一个的选项菜单代码,我也需要为其他两个更改。
我能想到的唯一选择是我有一个“帮助程序”类 (POJO),我可以向其中添加一个方法并将 context
传递给它以允许使用 getMenuInflator( )
方法和另一种方法,我可以将 item.getItemId()
的结果传递给 switch-case 进行处理。
让多个 Activity 具有相同选项菜单的正常方法是什么?
最佳答案
使用这两种方法创建一个简单的独立类:
public class MyMenuHandler {
private Activity mActivity;
public MyMenuHandler(Activity activity) {
mActivity = activity;
}
public boolean onPrepareOptionsMenu(Menu menu) {
MenuInflater inflater = mActivity.getMenuInflater();
menu.clear();
inflater.inflate(R.menu.gv_options_menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.view:
...
}
}
}
在您的 Activity 中覆盖这些回调方法并将调用重定向到您的 MyMenuHandler 类的实例:
public class MyActivity1 extends TabActivity {
private MyMenuHandler mMenuHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
...
mMenuHandler = new MyMenuHandler(this);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// you may also add here some items which are specific
// for one activity, not for the others
...
return mMenuHandler.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle selection of your specific items here,
// if none of them has been selected call mMenuHandler method
...
return mMenuHandler.onOptionsItemSelected(item);
}
}
这将使您可以将响应基本菜单项选择的代码保存在一个位置,因此无需担心将其复制粘贴到具有相同菜单的所有 Activity 。
关于android - 重新使用选项菜单代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116588/