java - 关于android源码中Swithpreference.java中的onBindview()方法

标签 java android

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/

相关文章:

java - 使用外部枚举定义从 JAX-RS 端点生成 Swagger

Android位图轮廓

java - tomcat开发配置,如何添加webapp,以及引用静态文件

java - 为什么带有前导零的整数文字会被奇怪地解释?

java - 使用数组作为类的参数

android - 如何相对于屏幕尺寸缩放图像?

java - Android - 检查互联网访问

java - java中计算16位CRC并将其附加到字节数组的末尾

android - 如何从 FragmentActivity 中获取 fragment 实例?

java - 在游戏控制台 kotlin.UninitializedPropertyAccessException 中出现此错误