protected void onBindView(View view) {
super.onBindView(view);
View checkableView = view.findViewById(com.android.internal.R.id.switch_widget);
if (checkableView != null && checkableView instanceof Checkable) {
if (checkableView instanceof Switch) {
final Switch switchView = (Switch) checkableView;
switchView.setOnCheckedChangeListener(null);
}
((Checkable) checkableView).setChecked(mChecked);
if (checkableView instanceof Switch) {
final Switch switchView = (Switch) checkableView;
switchView.setTextOn(mSwitchOn);
switchView.setTextOff(mSwitchOff);
switchView.setOnCheckedChangeListener(mListener);
}
}
syncSummaryView(view);
}
我有一个问题,为什么在这里首先判断switch_widget和setOnCheckedChangeListener(null); R.id.switch_widget是否用于许多SwitchPreference,所以我们需要清除它,对吗?但是以前的SwithchPreference不需要设置监视器吗?
最佳答案
我的问题是,为什么必须首先switchView.setOnCheckedChangeListener(null)?谢谢!
您将不得不查看文件的历史记录,以查看是否有注释阐明了为什么以这种方式设置代码。但是,通常来说,如果您不想使用后面的代码调用侦听器,则将清除它。
由于此代码仅想设置视图的初始状态,因此它不希望调用状态更改时通常应调用的侦听器(例如响应用户单击)。因此,为防止发生这种情况,将在更新检查状态后保存,清除并还原侦听器。
希望有帮助!