我有2个编辑文本和1个按钮。在用户填写所有编辑文本之前,如何禁用此按钮?我使用了这段代码,但是当我运行这段代码时,它总是禁用按钮,即使我填写了2个Edit文本,也不知道onTextChanged和beforeTextChanged做了什么!!
请帮助我,我将不胜感激。
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) {
}
}
}}}
答案 0 :(得分:2)
Monerah将checkEditText方法更改为:
private boolean checkEditText(EditText edit) {
return edit.getText().length() == 0;
}
和你的updateButtonState():
void updateButtonState() {
if(checkEditText(edit1) && checkEditText(edit2)) button.setEnabled(false);
else button.setEnabled(true);
}
这会使它正常工作。
作为一个额外的建议,我会更改isEditTextEmpty的checkEditText名称或更具代表性的名称。它会使if语句更具可读性:)
关于onTextChanged和beforeTextChanged方法的问题,请看看以下内容:
beforeTextChanged(CharSequence s,int start,int count,int after)。 这意味着字符即将被替换为一些新文本。该文本是不可编辑的。 使用:当您需要查看即将更改的旧文本时。
onTextChanged(CharSequence s,int start,int before,int count)。 已经进行了更改,一些字符已被替换。该文本是不可编辑的。 使用:当您需要查看文本中的哪些字符是新的时。
afterTextChanged(可编辑的)。 与上面相同,除了现在文本是可编辑的。 使用:当您需要查看并可能编辑新文本时。
前两种方法对于您尝试使用afterTextChanged完成后无用。 希望它有所帮助。
答案 1 :(得分: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
}
}