android如何在将数据输入编辑文本字段时启用或禁用动态创建的开关

android如何在将数据输入编辑文本字段时启用或禁用动态创建的开关,android,dynamic,switch-statement,programmatically,Android,Dynamic,Switch Statement,Programmatically,我创建了一个带有开关和编辑文本字段的表。我想做的是,当我在同一表格行的编辑文本字段中输入某个文本时,将开关设置为启用,因此,如果我在编辑文本行8中输入文本,如何将第8行中的开关设置为启用 for (int i = 0; i< dbarray_id.size(); i++ ) { CODE IS HERE TO CREATE A TABLEROW //Now add a switch to the row Switch switc

我创建了一个带有开关和编辑文本字段的表。我想做的是,当我在同一表格行的编辑文本字段中输入某个文本时,将开关设置为启用,因此,如果我在编辑文本行8中输入文本,如何将第8行中的开关设置为启用

  for (int i = 0; i< dbarray_id.size(); i++ )
    {
        CODE IS HERE TO CREATE A TABLEROW

        //Now add a switch to the row
        Switch switch1 = new Switch(getActivity());
        switch1.setId(i);
        switch1.setTag(i);
        switch1.setSwitchMinWidth(50);
        switch1.setEnabled(false)

        //Add a edittext field to the row
        final EditText txtaccesscode = new EditText(getActivity());
        txtaccesscode.setId(i);
        txtaccesscode.setTag(i);
        txtaccesscode.setHint("CODE?");
        txtaccesscode.setInputType(TYPE_TEXT_FLAG_NO_SUGGESTIONS);
        txtaccesscode.addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(
            ....etc... for after change ...


        repeat for the number of rows in the database.
for(int i=0;i
因此,当我在任何一行中输入文本时,相应的开关被启用


谢谢

开关必须是最终或字段

final Switch switch = new Switch(getActivity());
然后,您可以在beforeTextChanged侦听器上访问它,在那里您可以像往常一样进行更改

txtaccesscode.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(){
            switch.setEnable(true);
        }
    }
);

循环结束后,您无法再访问变量,但它仍然存在。在循环的下一次迭代中,您创建的开关(即使具有相同的名称)是一个不同的开关,因为它是一个新的作用域。

将EditText和Swith引用封装在一个类中,然后当textWatcher触发这两个引用时,将是预料之中

public static class SwitchToggleListener {
    public SwitchToggleListener(final Switch switchView, final EditText editText) {
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {
                //Do nothing
            }
            @Override
            public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
                //Your own condition here
                switchView.setEnabled(s.toString().equals("ok"));
            }
            @Override
            public void afterTextChanged(final Editable s) {
                //Do nothing
            }
        });
    }
}
然后在循环中执行以下操作:

new SwitchToggleListener(switch1, editText1);
new SwitchToggleListener(switch2, editText2);
new SwitchToggleListener(switch3, editText3);

如果您有太多行,这可能是不够的,还有其他方法可以做到这一点,如果是这样,请告诉我。

不知道如果数据输入到文本字段8,如何启用开关8,如果数据输入到文本字段9,如何启用开关9,,,,上面没有选择正确的一个。因为即使无法从c的其余部分访问变量ode因为是另一个作用域,您已经在listener中定义,当textField8中的文本发生变化时,switch8将切换,变量仍然存在,只是在该作用域中可以访问。但是如何将其设置为启用switch(8)。IsEnabled我添加了一些信息,希望它能帮助您理解。