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.
|
||||
*/
|
||||
public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) {
|
||||
if (mMainSwitchBar == null) {
|
||||
if (!mBeforeCheckedChangeListeners.contains(listener)) {
|
||||
mBeforeCheckedChangeListeners.add(listener);
|
||||
} else {
|
||||
}
|
||||
if (mMainSwitchBar != null) {
|
||||
mMainSwitchBar.setOnBeforeCheckedChangeListener(listener);
|
||||
}
|
||||
}
|
||||
@@ -210,9 +211,10 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements
|
||||
* Adds a listener for switch changes
|
||||
*/
|
||||
public void addOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
|
||||
if (mMainSwitchBar == null) {
|
||||
if (!mSwitchChangeListeners.contains(listener)) {
|
||||
mSwitchChangeListeners.add(listener);
|
||||
} else {
|
||||
}
|
||||
if (mMainSwitchBar != null) {
|
||||
mMainSwitchBar.addOnSwitchChangeListener(listener);
|
||||
}
|
||||
}
|
||||
@@ -221,9 +223,8 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements
|
||||
* Remove a listener for switch changes
|
||||
*/
|
||||
public void removeOnSwitchChangeListener(OnMainSwitchChangeListener listener) {
|
||||
if (mMainSwitchBar == null) {
|
||||
mSwitchChangeListeners.remove(listener);
|
||||
} else {
|
||||
mSwitchChangeListeners.remove(listener);
|
||||
if (mMainSwitchBar != null) {
|
||||
mMainSwitchBar.removeOnSwitchChangeListener(listener);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user