首页 > 解决方案 > 无法使用 setOnCheckedChange(onCheckedChange) 获得开关侦听器

问题描述

我在让开关按钮侦听器正常工作时遇到问题。这是我的主要活动:

public class MainActivity extends WearableActivity {

    private Switch mySwitch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Enables Always-on
        setAmbientEnabled();

        // React to settings change
        mySwitch= findViewById(R.id.mySwitch);
        mySwitch.setOnCheckedChangeListener(this); // <--------
    }

    public void onCheckedChange(CompoundButton s, boolean isChecked) {
        ...
    }

}

在箭头线上,我尝试了这个(就像互联网上的一个样本)。它在 Android Studio 中被标记为错误。AS 建议我转换为 CommpoundButton.onCheckedChange (或类似的)。当我启动应用程序时,它会崩溃说 MainActivity 不能被投射到那个。我也不能做 setOnCheckedChangeListener(onCheckedChange);

我做错了什么?

标签: android

解决方案


如果您OnCheckedChangeListenerthis用作setOnCheckedChangeListener().

public class MainActivity extends WearableActivity implements CompoundButton.OnCheckedChangeListener{

这是因为setOnCheckedChangeListener()将只接受 的实例OnCheckedChangeListener,因此您不能简单地使用this,因为this指向的 Activity 不是 的实例OnCheckedChangeListener

然而,由于OnCheckedChangeListener是一个接口,这很容易通过实现来纠正OnCheckedChangeListener。由于继承在 Java 中的工作方式,OnCheckedChangeListener一旦实现了接口,Activity 就会自动成为一个实例。

看起来这是您想要的选项,因为您还覆盖了onCheckedChange()Activity 中的方法。


推荐阅读