如何用一个不同的菜单项处理 2 个相同的选项菜单

How to handle 2 same Option Menus with one distinguish menu item

我有 2 个带有选项菜单的活动。选项菜单存在 4 个菜单项。其中 3 个(选项 1、选项 2 和选项 3)存在于两个选项菜单中。选项菜单区分第 4 个菜单项(activity1 中的选项 4 和 activity2 中的选项 5)。

在 Android 中是否有机会外包 3 个相同的选项 - 例如 OptionMenuHelper class - 并从 2 个活动中访问它,这样我就不必完全执行 2 次onOptionsItemSelected(MenuItem) 中的相同方法?

感谢建议

鹅卵石


第一次更新

示例:

我想外包 exportAsCSV() 以便我可以从我的 2 个活动中访问它

 @Override
public boolean onOptionsItemSelected(MenuItem item) {  

    switch (item.getItemId()) {

        case ...

        case R.id.om_export:
            exportAsCSV();                
            return true;
        case ...
    }
    return super.onOptionsItemSelected(item);
}

exportAsCSV 包括一个游标,它通过 getContentResolver 从内容提供程序获取数据。并且 ContentResolver 不能是静态的:/

private void exportAsCSV() {

   ...

   Cursor cursor = getContentResolver().query(MyQueries.CONTENT_URI_ALL,
            new String[]{Column1, Column2},
            "", null, Column1);

   ....
}

第二次更新

好的我解决了:

public class MenuHelper {

    Context context;

    public ExportHelper(Context con) {
        context=con;
    }


    public void exportAsCSV() {

    ...

    Cursor cursor = context.getContentResolver().query(MyQueries.CONTENT_URI_ALL,
        new String[]{Column1, Column2},
        "", null, Column1);

    ...

    }
}

好吧,这种方式不是静态的(我的意图是什么),而是有效的。现在我可以通过创建一个对象从我想要的每个 activity 访问它...

还是谢谢你

(如果您知道如何在静态中执行此操作,请告诉我;))

问候

我真的看不出这样做有什么好处,只是您不想使用样板代码。您绝对可以编写一个静态帮助器方法,它执行 menu.xml.

的 inflation

我只写一个 menu.xml 并决定在 onCreateOptionsMenu() 两个活动中显示哪些项目。没有那么多代码。例如像这样:

@Override
public void onCreateOptionsMenu ( Menu menu, MenuInflater inflater ) {
    inflater.inflate(R.menu.shared_menu, menu);

    MenuItem item5 = menu.findItem(R.id.item_5);

    // hide in activity 2
    if(item5 != null)
        item5.setVisible(false);

    // static helper call
    MenuHelper.initActiviyMenu(this, menu, inflater);
}

...

public class MenuHelper {
    public static void initActivity( Activity activity, Menu menu, MenuInflater inflater ){
         inflater.inflate(R.menu.shared_menu, menu);

         if(activity instanceof ActivityA){
             // do stuff, hide items, content provider 
         }
         if(activity instanceof ActivityB){
             // do stuff, hide items, content provider 
         }
    }


}