Java 编辑文本为空/非空时如何禁用/启用按钮
我有2个编辑文本和1个按钮。在用户填写所有编辑文本之前,如何禁用此按钮?我使用了这段代码,但当我运行这段代码时,它总是禁用按钮,即使我填写了2个编辑文本,我也不知道ContextChanged和beforeTextChanged在做什么 请帮帮我,我会很感激的Java 编辑文本为空/非空时如何禁用/启用按钮,java,android,Java,Android,我有2个编辑文本和1个按钮。在用户填写所有编辑文本之前,如何禁用此按钮?我使用了这段代码,但当我运行这段代码时,它总是禁用按钮,即使我填写了2个编辑文本,我也不知道ContextChanged和beforeTextChanged在做什么 请帮帮我,我会很感激的 public class TestActivity extends Activity { /** Called when the activity is first created. */ EditText edit1; EditText
public class TestActivity extends Activity {
/** Called when the activity is first created. */
EditText edit1;
EditText edit2;
EditText edit3;
Button button;
String test1;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Your initialization code...
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edit1= (EditText) findViewById(R.id.edit1);
edit2= (EditText) findViewById(R.id.edit2);
button=(Button) findViewById(R.id.button);
TextWatcher watcher = new LocalTextWatcher();
edit1.addTextChangedListener(watcher);
edit2.addTextChangedListener(watcher);
updateButtonState();
}
void updateButtonState() {
boolean enabled;
if(enabled = checkEditText(edit1)
&& checkEditText(edit2)){
button.setEnabled(enabled);}
}
}
private boolean checkEditText(EditText edit) {
return Integer.getInteger(edit1.getText().toString()) != null;
}
private class LocalTextWatcher implements TextWatcher {
public void afterTextChanged(Editable s) {
updateButtonState();
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
}
}}}
Monerah将您的checkEditText方法更改为:
private boolean checkEditText(EditText edit) {
return edit.getText().length() == 0;
}
您的updateButtonState()用于:
这将使它正常工作
作为一个额外的建议,我会将checkEditText的名称改为isEditTextEmpty或更具代表性的名称。这将使if语句更具可读性:)
关于您关于ContextChanged和beforeTextChanged方法的问题,请查看以下内容:
更改前文本(字符序列、整数开始、整数计数、整数结束)。
这意味着这些字符将被一些新文本替换。文本不可编辑。
使用:当您需要查看即将更改的旧文本时
onTextChanged(字符序列、int start、int before、int count)。
已经进行了更改,一些字符刚刚被替换。文本不可编辑。
使用:当您需要查看文本中哪些字符是新字符时
后文本已更改(可编辑)。
与上面相同,只是现在文本是可编辑的。
使用:当您需要查看并可能编辑新文本时
前两种方法对于您试图在完成后使用PostTextChange执行的操作没有任何用处。
希望有帮助。实际上,这些方法中的任何一种都可以根据文本字段中的内容来实现按钮的启用/禁用:
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
if (charSequence.length() == 0 && after > 0) {
// enable button
} else if (charSequence.length() == count && after == 0) {
// disable button
}
}
// OR
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
if (charSequence.length() == count && before == 0) {
// enable button
} else if (charSequence.length() == 0 && before > 0)
// disable button
}
}
// OR
@Override
public void afterTextChanged(Editable editable) {
if (editable.length() > 0 && !button.isEnabled()) {
// enable button
} else if (editable.length() == 0 && btnEnroll.isEnabled()) {
// disable button
}
}
在checkEditText方法中,如果文本长度大于0,则更容易进行测试
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
if (charSequence.length() == 0 && after > 0) {
// enable button
} else if (charSequence.length() == count && after == 0) {
// disable button
}
}
// OR
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
if (charSequence.length() == count && before == 0) {
// enable button
} else if (charSequence.length() == 0 && before > 0)
// disable button
}
}
// OR
@Override
public void afterTextChanged(Editable editable) {
if (editable.length() > 0 && !button.isEnabled()) {
// enable button
} else if (editable.length() == 0 && btnEnroll.isEnabled()) {
// disable button
}
}