2012-02-27 105 views
3

我有2个编辑文本和1个按钮。我如何才能使该按钮被禁用,直到用户填写所有编辑文本?我使用这段代码,但是当我运行这段代码时,即使我填充了2个编辑文本,它也总是禁用该按钮,我也不知道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

在checkEditText方法,这将是更容易,如果长度来测试该文本大于0 – VirtualTroll 2012-02-27 20:08:24

回答

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); 
} 

这将使工作的权利。

作为一个额外的建议,我会改变checkEditText的名称isEditTextEmpty或更具代表性的东西。它将使if语句更可读:)

关于什么的onTextChanged和beforeTextChanged方法呢,看看下面你的问题:

beforeTextChanged(CharSequence中,诠释开始,诠释计数, int后)。 这意味着字符即将被替换为一些新的文本。文本是不可编辑的。 使用:当你需要看看即将改变的旧文本。

onTextChanged(CharSequence s,int start,int before,int count)。 已做出更改,某些字符刚被替换。文本是不可编辑的。 用途:当您需要查看文本中的哪些字符是新的。

afterTextChanged(可编辑的)。 与上面相同,但现在文本是可编辑的。 用途:当您需要查看和编辑新文本时。

前两个方法对你正在尝试做什么没有用,所以你用afterTextChanged完成了。 希望它有帮助。

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 
    } 
} 
相关问题