Обновление виджета после изменения настроек - PullRequest
0 голосов
/ 27 декабря 2011

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

Я пытаюсь настроить параметры своего виджета; в этом случае у меня есть флажок предпочтение либо отображать процент или нет. В моем классе WidgetConfig у меня настроен флажок и я пытаюсь использовать метод onBackPressed для обновления виджета.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.new_widget_config);

    final CheckBoxPreference checkBoxPref = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref");
    checkBoxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
        public boolean onPreferenceChange(Preference preference, Object newValue) {

            SharedPreferences myPreferences = context.getSharedPreferences(PREFS_NAME, 0);
            SharedPreferences.Editor prefEditor = myPreferences.edit();

            if (newValue.toString().equals("true"))
            {
                prefEditor.putBoolean("checkboxPref", true);
                prefEditor.commit();
            }
            else
            {
                prefEditor.putBoolean("checkboxPref", false);
                prefEditor.commit();
            }
            return true;
        }
    });
}

@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, BatteryInfoData.class);
    updateIntent.setAction("PreferencesUpdated");
    updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
    sendBroadcast(updateIntent);
}

Когда я пытаюсь вставить следующий код в мой метод onReceive, я получаю ошибки, что действие не может быть разрешено для переменной. Я правильно это делаю?

    @Override
public void onReceive(Context context, Intent intent) {
    if ("PreferencesUpdated".equals(action)) {
        RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);
        int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
        updateWidgetView(context, remoteView, appWidgetId);
    }   
}

1 Ответ

1 голос
/ 02 февраля 2012

Вы получаете решение проблем, потому что у вас нет переменной action. Там есть

String action = intent.getAction();

строка отсутствует в начале вашего onReceive(Context context, Intent intent).

...