多个交换机的监听器

Lai*_*ire 0 android button listener

我在我的应用程序中有一个包含许多开关的设置活动.我试图避免编写50个setOnCheckedChangeListener我试图在布局文件中设置onClick事件:

        <Switch
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/switchVibra"
            android:layout_weight="0.1"
            android:onClick="switchChange" />
Run Code Online (Sandbox Code Playgroud)

方法:

public void switchChange(View v){
    switch (v.getId()){
        case R.id.switchVibra:
           // Do something
           break;
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,当您擦除开关时,此方法不会注册更改.还有其他选项可以避免为每个开关编写一个监听器吗?

Nic*_*oso 10

Switch不使用单击侦听器,它使用不能从XML设置的OnCheckedChangeListener.

请执行下列操作

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    CompoundButton.OnCheckedChangeListener multiListener = new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton v, boolean isChecked) {
            switch (v.getId()){
                case R.id.switchVibra:
                    // Do something
                    break;
            }
       }
    });

    //on each switch
    ((Switch) findViewById(R.id.switchVibra)).setOnCheckedChangeListener(multiListener);
}
Run Code Online (Sandbox Code Playgroud)