如何用一个不同的菜单项处理 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
}
}
}
我有 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
}
}
}