Android EditText setEnabled(false) 不工作
Android EditText setEnabled(false) isn't working
我有几个动态创建的 EditText 字段。
如果另一个字段中的值不符合特定条件,我将尝试禁用这些字段。
问题是,如果满足其他条件,则通过设置 setEnabled(false);
.
可以正确禁用该字段
基本上在零件号字段中,我们检查零件号是否需要序列号或批号。
如果零件需要序列号,序列号字段显示错误,批号字段禁用,数量字段设置为“1”并禁用
如果需要批号,批号字段会显示错误并且序列号字段会被禁用。这按预期工作。
public void onTextChanged(@NotNull EditText target, @NotNull Editable s) {
int serialIndex = 4;
int lotIndex = 5;
int quantityIndex = 6;
EditText serial = findViewById(serialIndex);
EditText lot = findViewById(lotIndex);
EditText quantity = findViewById(quantityIndex);
String txt = partNum.getText().toString().toUpperCase();
partNumber = txt;
Global.isSerialized = DatabaseManager.isSerialized(txt);
Global.isLot = DatabaseManager.isLot(txt);
//this is not working. The fields do not get disabled.
if (!Global.isSerialized && !Global.isLot) {
lot.setEnabled(false);
serial.setEnabled(false);
findViewById(id).setNextFocusDownId(quantityIndex);
}
if (txt.equals("")) {
serial.setError(null);
lot.setError(null);
if (!quantity.isEnabled()) {
quantity.setEnabled(true);
quantity.setText("");
}
}
//This is working. The lot number field gets disabled.
if (Global.isSerialized) {
lot.setEnabled(false);
snRequired = true;
serial.setError("Serial Number Required");
quantity.setText("1");
quantity.setEnabled(false);
findViewById(id).setNextFocusDownId(serialIndex);
} else {
snRequired = false;
serial.setError(null);
quantity.setText("");
quantity.setEnabled(true);
}
//this is also working. The serial number field gets disabled.
if (Global.isLot) {
lot.setEnabled(true);
lnRequired = true;
lot.setError("Lot Number Required");
serial.setEnabled(false);
quantity.setText("");
quantity.setEnabled(true);
findViewById(id).setNextFocusDownId(lotIndex);
} else {
lot.setError(null);
lnRequired = false;
}
有什么想法吗?
我很惊讶这仍然是一个问题。很久以前就有人问过这个问题:How to set editable true/false EditText in Android programmatically?
也许试试这个,看看会发生什么?
我想通了。硬编码字段索引是错误的方法。通过在 fieldList 数组上使用 for 循环并根据字段名称将索引分配给变量,我能够获得正确的索引。一旦我这样做了,我就能够根据需要毫无问题地设置启用(真)或设置启用(假)。
我有几个动态创建的 EditText 字段。
如果另一个字段中的值不符合特定条件,我将尝试禁用这些字段。
问题是,如果满足其他条件,则通过设置 setEnabled(false);
.
基本上在零件号字段中,我们检查零件号是否需要序列号或批号。 如果零件需要序列号,序列号字段显示错误,批号字段禁用,数量字段设置为“1”并禁用 如果需要批号,批号字段会显示错误并且序列号字段会被禁用。这按预期工作。
public void onTextChanged(@NotNull EditText target, @NotNull Editable s) {
int serialIndex = 4;
int lotIndex = 5;
int quantityIndex = 6;
EditText serial = findViewById(serialIndex);
EditText lot = findViewById(lotIndex);
EditText quantity = findViewById(quantityIndex);
String txt = partNum.getText().toString().toUpperCase();
partNumber = txt;
Global.isSerialized = DatabaseManager.isSerialized(txt);
Global.isLot = DatabaseManager.isLot(txt);
//this is not working. The fields do not get disabled.
if (!Global.isSerialized && !Global.isLot) {
lot.setEnabled(false);
serial.setEnabled(false);
findViewById(id).setNextFocusDownId(quantityIndex);
}
if (txt.equals("")) {
serial.setError(null);
lot.setError(null);
if (!quantity.isEnabled()) {
quantity.setEnabled(true);
quantity.setText("");
}
}
//This is working. The lot number field gets disabled.
if (Global.isSerialized) {
lot.setEnabled(false);
snRequired = true;
serial.setError("Serial Number Required");
quantity.setText("1");
quantity.setEnabled(false);
findViewById(id).setNextFocusDownId(serialIndex);
} else {
snRequired = false;
serial.setError(null);
quantity.setText("");
quantity.setEnabled(true);
}
//this is also working. The serial number field gets disabled.
if (Global.isLot) {
lot.setEnabled(true);
lnRequired = true;
lot.setError("Lot Number Required");
serial.setEnabled(false);
quantity.setText("");
quantity.setEnabled(true);
findViewById(id).setNextFocusDownId(lotIndex);
} else {
lot.setError(null);
lnRequired = false;
}
有什么想法吗?
我很惊讶这仍然是一个问题。很久以前就有人问过这个问题:How to set editable true/false EditText in Android programmatically?
也许试试这个,看看会发生什么?
我想通了。硬编码字段索引是错误的方法。通过在 fieldList 数组上使用 for 循环并根据字段名称将索引分配给变量,我能够获得正确的索引。一旦我这样做了,我就能够根据需要毫无问题地设置启用(真)或设置启用(假)。