android - 重新使用选项菜单代码

标签 android android-optionsmenu

有没有一种方便的方法可以在多个 Activity 中显示相同的选项菜单选项?

示例:在我的应用中,我以三种方式之一显示电视指南。

  1. 7 天指南(带有 7 个标签的 TabActivity)
  2. 所有 channel “正在展示”(ListActivity)
  3. 今天开始时间的所有节目( 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/

相关文章:

android - 登录成功后使用 volley、php、mysql 登录 Activity Intent 不进入其他 Activity

android - 获取原始联系人照片

android - 刷新 onCreateOptionsMenu android

android - 如何对 Android 应用程序选项菜单中的菜单项进行排序?

java - Android XML解析: Parse this special Type of XML i have no Idia about this

Android 与谷歌地图位置和 URL Shortener API 共享 Intent

android - 如何在菜单上保存所选单选按钮的实例状态

android - 在上下文操作栏中创建弹出选项菜单

java - 安卓选项菜单

Android recyclerview 分隔符与内部布局 View 对齐