更改首选项后更新小部件

时间:2011-12-26 22:54:41

标签: android android-widget sharedpreferences

在开始之前,我想指出我已经查看了其他问题,包括this one。我现在无法工作。

我正在尝试设置我的小部件的首选项;在这种情况下,我有一个复选框首选项来显示百分比。在我的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 个答案:

答案 0 :(得分:1)

您可以解决问题,因为那里没有变量action。 有一个

String action = intent.getAction();
在您onReceive(Context context, Intent intent)的开头缺少

行。