Используя PreferencesActivity из виджета? - PullRequest
2 голосов
/ 25 июня 2010

PreferenceActivity выглядит как действительно простой вспомогательный класс для управления настройками приложения.

Я также хотел бы использовать этот же класс из виджета.

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

Я не могу сказать, когда редактирование настроек завершено!

Все примеры настроек виджетов, которые я вижу насеть использует вручную созданный экран предпочтений, а не вспомогательный класс PreferenceActivity, а затем прослушивает нажатие кнопки «Сохранить».

Как я могу сделать это с PreferenceActivity, поскольку в этом действии нет кнопки сохранения,Вы просто используете кнопку «назад», чтобы зафиксировать изменения ваших предпочтений.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 02 июля 2010

Я пытался сделать то же самое, и я думаю, что взломал это. Я обрабатываю событие onBackPressed () в PreferenceActivity и выполняю обновление виджета оттуда с помощью sendBroadcast ().

In PreferenceActivity:

@Override
public void onBackPressed() {
    Intent intent=getIntent();
    Bundle extras=intent.getExtras();   
    int widgetId=extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);

    // this is the intent broadcast/returned to the widget
    Intent updateIntent = new Intent(this, WidgetProvider.class);
    updateIntent.setAction("PreferencesUpdated");
    updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
    sendBroadcast(updateIntent);
}

В вашем виджетеProvider:

@Override
public void onReceive(Context context, Intent intent) {
    if ("PreferencesUpdated".equals(action)) {
        // update your widget here
        // my widget supports multiple instances so I needed to uniquely identify them like this
        RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);
        int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
        updateWidgetView(context, remoteView, appWidgetId);
    }   
}

ПРИМЕЧАНИЕ. В версии 1.5 onBackPressed не поддерживается, поэтому закомментируйте @Override для onBackPressed и добавьте этот код

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    Log.d(LOG_TAG, "onKeyDown() "+ keyCode);
    if (keyCode==KeyEvent.KEYCODE_BACK && Integer.parseInt(Build.VERSION.SDK)<5) {
        onBackPressed();
    }
}

Я должен добавить, что я новичок в разработке для Android, поэтому я могу делать это совершенно неправильно. Все, что я могу сказать, это работает для меня:)

Дайте мне знать, как вы поживаете.

0 голосов
/ 25 октября 2012

Вы должны быть в состоянии сказать, когда редактирование предпочтений завершено, реализовав SharedPreferences.OnShredPreferenceChangeListener .Используя это, вы можете обновить только когда определенные ключи изменены, или безоговорочно, когда таковые изменены.Не забудьте зарегистрировать его в PreferenceActivity onCreate и отменить регистрацию в onDestroy.

В этом случае вы можете сделать что-то похожее на Android: как принудительно обновить все виджеты определенного вида внутри слушателя, чтобы заставить все ваши виджеты обновляться на основе изменения SharedPreference.

Это старый вопрос, поэтому он может быть неактуальным.

...