Как плагин PhoneGap может изменить меню на Android?

Я написал плагин PhoneGap для Android, который вызывается из браузера при различных событиях, и я хотел бы, чтобы он влиял на то, какие элементы меню отображаются при нажатии кнопки «Меню». Например, я хочу отключить определенное событие или добавить определенные элементы. Следуя инструкциям на сайте Android, я знаю, что мне нужно переопределить onPrepareOptionsMenu() для динамического изменения пунктов меню.

В настоящее время мое решение включает в себя запись файла в плагине, а затем анализ этого файла в onPrepareOptionsMenu. Есть ли лучший способ сделать это? И есть ли способ получить дескриптор основного Activity из плагина?

edit: еще один способ, который я только что сделал, - это использовать общедоступную статическую переменную в основном классе Activity, к которому я обращаюсь из плагина.


person Waynn Lue    schedule 12.03.2012    source источник


Ответы (1)


Я использовал SharedPreferences (PreferenceManager.getDefaultSharedPreferences) для обмена данными между плагином и активностью. Хотя это может не совсем подходить для вашей ситуации, но вот как я это использовал.

Плагин1.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);
}

В моем случае общие настройки сделали свою работу, поскольку они сохраняют данные. Другие варианты можно посмотреть здесь

person dhaval    schedule 15.03.2012
comment
Итак, в настоящее время я использую InternalStorage — почему вы вместо этого выбрали SharedPreferences из любопытства? - person Waynn Lue; 15.03.2012
comment
Ранее я использовал общие настройки для сохранения настроек на уровне приложения и нашел их очень простыми в использовании, так что все действия и фоновые процессы имеют доступ к одним и тем же данным. Я также использовал файлы и базу данных, но нашел настройки для ограниченных данных. - person dhaval; 15.03.2012