Fixe the problem of invalid switch preference.
The source of this problem is that onBindViewHolder is called after the user add the OnMainSwitchChangeListener. Then preference gets a new MainSwitchBar in onBindViewHolder and causes the listener to fail. Bug: 223325900 Test: Manually test and observe the UI Change-Id: I6e58c4cf035811bb8805e76bebb5fbb86c7a79da
This commit is contained in:
@@ -199,9 +199,10 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements
|
|||||||
* Set the OnBeforeCheckedChangeListener.
|
* Set the OnBeforeCheckedChangeListener.
|
||||||
*/
|
*/
|
||||||
public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
|
public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
|
||||||
if (mMainSwitchBar == null) {
|
if (!mBeforeCheckedChangeListeners.contains(listener)) {
|
||||||
mBeforeCheckedChangeListeners.add(listener);
|
mBeforeCheckedChangeListeners.add(listener);
|
||||||
} else {
|
}
|
||||||
|
if (mMainSwitchBar != null) {
|
||||||
mMainSwitchBar.setOnBeforeCheckedChangeListener(listener);
|
mMainSwitchBar.setOnBeforeCheckedChangeListener(listener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -210,9 +211,10 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements
|
|||||||
* Adds a listener for switch changes
|
* Adds a listener for switch changes
|
||||||
*/
|
*/
|
||||||
public void addOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
|
public void addOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
|
||||||
if (mMainSwitchBar == null) {
|
if (!mSwitchChangeListeners.contains(listener)) {
|
||||||
mSwitchChangeListeners.add(listener);
|
mSwitchChangeListeners.add(listener);
|
||||||
} else {
|
}
|
||||||
|
if (mMainSwitchBar != null) {
|
||||||
mMainSwitchBar.addOnSwitchChangeListener(listener);
|
mMainSwitchBar.addOnSwitchChangeListener(listener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -221,9 +223,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements
|
|||||||
* Remove a listener for switch changes
|
* Remove a listener for switch changes
|
||||||
*/
|
*/
|
||||||
public void removeOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
|
public void removeOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
|
||||||
if (mMainSwitchBar == null) {
|
|
||||||
mSwitchChangeListeners.remove(listener);
|
mSwitchChangeListeners.remove(listener);
|
||||||
} else {
|
if (mMainSwitchBar != null) {
|
||||||
mMainSwitchBar.removeOnSwitchChangeListener(listener);
|
mMainSwitchBar.removeOnSwitchChangeListener(listener);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user