我有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);
...
}
}
嗯,这种方式不是静态的(我的意图是什么),但它的工作原理。现在我可以通过创建对象来从我想要的每个活动中访问它......
无论如何,谢谢你
(如果你知道如何在静态中做到这一点的解决方案,请告诉我;))
招呼
答案 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
}
}
}