Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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
Java Android Switch setOnCheckedChangeListener方法通过应用DRY原理传递对象 请考虑上面的代码。现在我有了一个开关,这个代码片段已经足够好了。但是,如果我有4个开关,那么重复4次这个代码片段。所以这是重复的。 这里是每个开关的toggl1->msg=“1”;对于toggl2->msg=“2”只需更改每个位置。_Java_Android_Design Patterns_Dry - Fatal编程技术网

Java Android Switch setOnCheckedChangeListener方法通过应用DRY原理传递对象 请考虑上面的代码。现在我有了一个开关,这个代码片段已经足够好了。但是,如果我有4个开关,那么重复4次这个代码片段。所以这是重复的。 这里是每个开关的toggl1->msg=“1”;对于toggl2->msg=“2”只需更改每个位置。

Java Android Switch setOnCheckedChangeListener方法通过应用DRY原理传递对象 请考虑上面的代码。现在我有了一个开关,这个代码片段已经足够好了。但是,如果我有4个开关,那么重复4次这个代码片段。所以这是重复的。 这里是每个开关的toggl1->msg=“1”;对于toggl2->msg=“2”只需更改每个位置。,java,android,design-patterns,dry,Java,Android,Design Patterns,Dry,如何将object传递给setOnCheckdChangeListener,以便遵守DRY原则 您可以使用视图的标记并在以后像这样检索它 toggle1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

如何将object传递给setOnCheckdChangeListener,以便遵守DRY原则

您可以使用
视图的标记
并在以后像这样检索它

toggle1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            try
            {
                String msg ="";
                if (isChecked) {
                    // The toggle is enabled

                    //msg = "Hello " + String.valueOf(!isChecked);
                    msg = "1";


                } else {
                    // The toggle is disabled
                    //msg = "Hello " + String.valueOf(!isChecked);
                    msg = "1";
                }
                msg += "\n";
                outputStream.write(msg.getBytes());

            }
            catch (IOException ex) { }
            catch (NullPointerException ex) { }



        }
    });

选中更改后传递的
按钮视图
是您切换的开关,它始终是切换变量之一

创建一个自定义选中的侦听器:

CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {

    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        try {
            String msg ="";
            if (isChecked) {
                // The toggle is enabled

                //msg = "Hello " + String.valueOf(!isChecked);
                msg = buttonView.getTag().toString()


            } else {
                // The toggle is disabled
                //msg = "Hello " + String.valueOf(!isChecked);
                msg = buttonView.getTag().toString()
            }
            msg += "\n";
            outputStream.write(msg.getBytes());

        } catch (IOException ex) {

        }
        catch (NullPointerException ex) {

        }
    }
};

toggle1.setTag("1");
toggle2.setTag("2");
toggle3.setTag("3");

toggle1.setOnCheckedChangeListener(listener);
toggle2.setOnCheckedChangeListener(listener);
toggle3.setOnCheckedChangeListener(listener);
然后应用:

private class customChecked implements CompoundButton.OnCheckedChangeListener {

    String msg;
    public customChecked(String mMsg){
        this.msg= mMsg;
    }
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        myString = msg;
    }
}

创建您自己的OnCheckedChangListener(扩展了原来的一个),并使用constructor@Chol如果你分享你的代码,我会从中学习。是的,我试着去创造。但是CompoundButton类需要上下文。});我无法匹配(已更新。忘记删除“)”它可以工作。setTag如何传递数据?我想探索它。Tag是View类的成员。它可以用于各种用途,比如你的解决方案更透明
toggle1.setOnCheckedChangeListener(new customChecked(1));
toggle2.setOnCheckedChangeListener(new customChecked(2));