2012-02-27 31 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 
    } 
} 
相關問題