如何使用一个区分菜单项处理2个相同的选项菜单

时间:2015-01-28 09:03:51

标签: android optionmenu

我有2个带有选项菜单的活动。选项菜单包含4个菜单项。其中3个(option1,option2和option3)存在于两个选项菜单中。选项菜单区分第4个菜单项(activity1中的option4和activity2中的option5)。

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

感谢您的建议

卵石


第一次更新

示例:

我想外包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从Content Provider获取数据。并且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);

    ...

    }
}

嗯,这种方式不是静态的(我的意图是什么),但它的工作原理。现在我可以通过创建对象来从我想要的每个活动中访问它......

无论如何,谢谢你

(如果你知道如何在静态中做到这一点的解决方案,请告诉我;))

招呼

1 个答案:

答案 0 :(得分:0)

除非您不想使用样板代码,否则我不会真正看到它的优势。你绝对可以编写一个静态助手方法,它会对menu.xml进行充气。

我只想写一个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 
         }
    }


}