我为Android编写了一个PhoneGap插件,它可以在各种事件中从浏览器调用,我希望它能影响按下菜单按钮时显示的菜单项。例如,我想禁用某个事件,或添加某些项目。按照安卓网站上的指示,我知道我需要覆盖onPrepareOptionsMenu()
来动态更改菜单项。
目前,我的解决方案包括在插件中编写一个文件,然后在onPrepareOptionsMenu中解析该文件。有更好的方法吗?有没有办法从插件中获得主Activity
的句柄?
edit:我刚刚做的另一种方法是在我从插件访问的主Activity类中使用一个公共静态变量。
我已经使用SharedPreferences(PreferenceManager.getDefaultSharedPreferences
)在插件和活动之间交换数据。虽然它可能不完全适合你的情况,但这是我使用它的方式。
Plugin.java
public PluginResult execute(String action, JSONArray args, String callbackId) {
PluginResult result = new PluginResult(Status.OK);
result.setKeepCallback(true);
// Set the preference data based on plugin call
counter++;
PreferenceManager.getDefaultSharedPreferences(this.ctx.getApplicationContext()).edit().putInt("counter", counter).commit();
return result;
}
AppActivity.java
public boolean onPrepareOptionsMenu(Menu menu) {
int counter = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext()).getInt("counter", 0);
Log.i("App", "counter value - " + counter);
return super.onPrepareOptionsMenu(menu);
}
在我的案例中,共享的偏好起到了作用,因为它能持久保存数据。您可以在此处查看其他选项