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)?谢谢!


您将不得不查看文件的历史记录,以查看是否有注释阐明了为什么以这种方式设置代码。但是,通常来说,如果您不想使用后面的代码调用侦听器,则将清除它。

由于此代码仅想设置视图的初始状态,因此它不希望调用状态更改时通常应调用的侦听器(例如响应用户单击)。因此,为防止发生这种情况,将在更新检查状态后保存,清除并还原侦听器。

希望有帮助!

10-08 09:22