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不需要设置monitor?
最佳答案
My qustion is that why must switchView.setOnCheckedChangeListener(null) firstly?Thanks!
您必须查看文件的历史记录,看看是否有注释阐明了代码为何如此设置。但是,一般来说,如果您不想使用后面的代码调用它,您将清除监听器。
由于此代码只想设置 View 的初始状态,因此它不想调用通常在状态发生变化时调用的监听器(例如响应用户单击) 。因此,为了防止这种情况,监听器会被保存、清除,然后在更新检查状态后恢复。
希望有帮助!
关于java - 关于android源码中Swithpreference.java中的onBindview()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59517875/