Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 多交换机侦听器_Android_Button_Listener - Fatal编程技术网

Android 多交换机侦听器

Android 多交换机侦听器,android,button,listener,Android,Button,Listener,我的应用程序中有一个带有多个开关的设置活动。 我试图避免编写50 setOnCheckedChangeListener我试图在布局文件中设置onClick事件: <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/switchVibra"

我的应用程序中有一个带有多个开关的设置活动。 我试图避免编写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" />
但是,当您擦拭开关时,此方法不会记录更改。
是否有其他选项可以避免为每个开关编写侦听器?

开关不使用单击侦听器,它使用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);
}

你也可以这样试试。。 假设开关名为switch1、switch2、switch2。。。。。开关10

公共类MainActivity扩展活动实现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.. 

}
int-nSwitch=10;
开关[]开关S=新开关[N开关];
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

对于(int i=1;i“不注册更改”是什么意思?您是否通过添加日志语句验证了调用它?@Sebastian:是的,我已经验证了。
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.. 

}