多个交换机的监听器

时间:2015-08-07 11:52:26

标签: 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" />

方法:

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

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

2 个答案:

答案 0 :(得分:10)

Switch不使用点击监听器,它使用的OnCheckedChangeListener不能从XML设置。

执行以下操作

@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);
}

答案 1 :(得分:0)

您也可以尝试这样.. 假设交换机名称如switch1,switch2,switch2 ..... switch10

公共类MainActivity扩展Activity实现OnCheckedChangeListener {

int nSwitch=10;
Switch[] switchs = new Switch[nSwitch];

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


    for(int i=1;i<=nSwitch;i++){
        String mySwitch = "switch"+i;
        int switchId = getResources().getIdentifier(mySwitch, "id", "com.example.SwitchDemo");

        switchs[i-1] = ((Switch)findViewById(switchId));
        switchs[i-1].setOnCheckedChangeListener(this);


    }
}

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    // TODO Auto-generated method stub

    //here you can do anythig for your particular Switch onCheckedChanged.. 

}

}

其中“com.example.SwitchDemo”完整的包名。