iielse / switchbutton

iOS风格SwitchButton。 只涉及到一个类文件,异常容易集成进入你的项目。支持开关的"延时和回滚"操作。only one class file, very easy to integrate into your program. support the delay operation and rolling back action of the switch
674 stars 192 forks source link

设置setOnStateChangedListener后无法打开开关 #12

Closed zhongzilu closed 6 years ago

zhongzilu commented 6 years ago

问题

当给Switch设置setOnStateChangedListener监听器后,点击Switch会一直卡在圆形柄略微变宽的状态,当注释掉监听器代码时就一切正常了,请问怎么回事呢? 注:使用纯Kotlin开发

环境

Android Stuido Version 3.0.1 compileSdkVersion 27 minSdkVersion 21 targetSdkVersion 27 gradle Build Version 3.0.1 gradle Version 4.1-all kotlin Version 1.1.51

相关代码

xml

<ch.ielse.view.SwitchView
            android:id="@+id/mSecretSwitch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end"
            app:primaryColor="@color/colorAccent" />

Activity (使用Kotlin编写,Activity实现了监听器的两个接口)

mSecretSwitch.setOnStateChangedListener(this)
iielse commented 6 years ago

开发者根据自身业务实际情况调用 toggleSwitch

具体阅读源码 https://github.com/iielse/SwitchButton/blob/master/app/src/main/java/ch/ielse/demo/NormalActivity.java

第68行至70行

BzCoder commented 5 years ago

今天也碰到这个问题了。主要原因是是设置OnStateChangedListener会把默认的OnStateChangedListener覆盖了。而默认的OnStateChangedListener中有切换开关的方法。想办法把toggleSwitch()加回去就好了,再包装一层接口或者在控件内部调用到toggleToOn的地方添加toggleSwitch或者直接在回调里再写一次。

private OnStateChangedListener listener = new OnStateChangedListener() {
        @Override
        public void toggleToOn(SwitchView view) {
            toggleSwitch(true);
        }

        @Override
        public void toggleToOff(SwitchView view) {
            toggleSwitch(false);
        }
    };