Fix handling of ListPreference.setValue()

Previously, setValue() was not calling notifyChanged(). This
prevented the summary from updating correctly. Now it calls
notifyChanged() the first time it's called and when the value
actually changes.

BUG: 9987962
Change-Id: I02dd4be6bde2969f39d30921a62a7ba908128e0e
This commit is contained in:
Alan Viverette
2013-07-23 14:43:37 -07:00
parent 209bede6b9
commit 94c02a1a1a

View File

@ -16,13 +16,13 @@
package android.preference;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.AttributeSet;
/**
@ -41,6 +41,7 @@ public class ListPreference extends DialogPreference {
private String mValue;
private String mSummary;
private int mClickedDialogEntryIndex;
private boolean mValueSet;
public ListPreference(Context context, AttributeSet attrs) {
super(context, attrs);
@ -130,9 +131,16 @@ public class ListPreference extends DialogPreference {
* @param value The value to set for the key.
*/
public void setValue(String value) {
mValue = value;
persistString(value);
// Always persist/notify the first time.
final boolean changed = !TextUtils.equals(mValue, value);
if (changed || !mValueSet) {
mValue = value;
mValueSet = true;
persistString(value);
if (changed) {
notifyChanged();
}
}
}
/**