开关按钮重置无法正常工作

时间:2015-12-14 14:16:56

标签: android android-layout

在UI视图中,切换按钮没有进入OFF状态,我也设置了onCheckedChangeListener。它保持开启也变成灰色。这在使用API​​15的模拟器上发生,但不会出现在我的真实设备上的API19上。 是代码还是模拟器?
最后sr.setChecked(false)只允许按钮变为灰色但不将其设置为OFF。
重现行为的最小例子: class var:

Switch sr;
Switch srs;

onCreate包括:

    sr = (Switch) findViewById(R.id.switch_ros);
    srs = (Switch) findViewById(R.id.switch_ros_stream);
    sr.setOnCheckedChangeListener(this);
    srs.setOnCheckedChangeListener(this);

onCheckedChanged包括:

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    buttonView.setChecked(false);
}

修改: 我尝试了Nexus_5_API_19而不是Nexus_4_API_15,它运行正常。似乎是Android-Bug。 Image of Simulators

1 个答案:

答案 0 :(得分:2)

将这两个放在班级的顶部

@Override
protected void onCreate( Bundle savedInstanceCreate )
{
    [...]// other onCreate() stuff
    sr = (Switch) findViewById(R.id.switch_ros);
    srs = (Switch) findViewById(R.id.switch_ros_stream);
    sr.setOnCheckedChangeListener(this);
    srs.setOnCheckedChangeListener(this);
}

然后在onCreate()

@Override
public void onCheckedChanged( CompoundButton buttonView, boolean isChecked )
{
    switch(buttonView.getId())
    {
        case R.id.switch_ros:
            //boolean wifi_state = isConnected(isChecked);
            sr.setChecked(isChecked);
            break;
        case R.id.switch_ros_stream:
            [...]// other switch function
            srs.setChecked(isChecked);
            break;
    }
}

然后OnCheckedChangeListener()

$_SESSION['...']

修改1 onCheckedChangeListener无法找到您尝试打开/关闭的开关按钮。这是因为您在该方法中投入了多个切换按钮。您需要使用switch case或if else语句来区分您希望切换的按钮。