android 如何在编辑文本字段中输入数据时启用或禁用动态创建的开关
android How to enable or disable a dynamically created switch when data is entered into a edit text field
我创建了一个带有开关和编辑文本字段的 table。我想要发生的是当我在同一 table 行的编辑文本字段中输入特定文本时将开关设置为启用 那么如果我输入,如何设置第 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.
因此,当我在任何行中输入文本时,相应的开关就会启用。
谢谢
开关必须是最终的或字段。
final Switch switch = new Switch(getActivity());
然后你可以在你的 beforeTextChanged 监听器上访问它,在那里你像往常一样改变。
txtaccesscode.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(){
switch.setEnable(true);
}
}
);
循环结束后,您将无法再访问该变量,但它仍然存在。在循环的下一次迭代中,您创建的开关即使具有相同的名称也是一个不同的开关,因为它是一个新的范围。
将 EditText 和 Swith 引用封装在 class 中,然后当 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);
如果你有太多的行,也许这是 inneficient,还有其他方法可以做到这一点,如果是这种情况,请告诉我。
我创建了一个带有开关和编辑文本字段的 table。我想要发生的是当我在同一 table 行的编辑文本字段中输入特定文本时将开关设置为启用 那么如果我输入,如何设置第 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.
因此,当我在任何行中输入文本时,相应的开关就会启用。
谢谢
开关必须是最终的或字段。
final Switch switch = new Switch(getActivity());
然后你可以在你的 beforeTextChanged 监听器上访问它,在那里你像往常一样改变。
txtaccesscode.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(){
switch.setEnable(true);
}
}
);
循环结束后,您将无法再访问该变量,但它仍然存在。在循环的下一次迭代中,您创建的开关即使具有相同的名称也是一个不同的开关,因为它是一个新的范围。
将 EditText 和 Swith 引用封装在 class 中,然后当 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);
如果你有太多的行,也许这是 inneficient,还有其他方法可以做到这一点,如果是这种情况,请告诉我。