2013-12-19 91 views
15

我有兩個文本字段和一個按鈕。除非兩個EditText字段都不爲空,否則我想禁用該按鈕。我在這裏嘗試了很多解決方案,但它們不起作用。這裏是我的代碼:編輯文本字段爲空時禁用按鈕

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 


public class RegisterActivity extends Activity { 

    private EditText editText1; 
    private EditText editText2; 

    //TextWatcher 
    private TextWatcher textWatcher = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) 
     { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { 
      checkFieldsForEmptyValues(); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 
     } 
    }; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.register_activity); 


     editText1 = (EditText) findViewById(R.id.reg_password); 
     editText2 = (EditText) findViewById(R.id.reg_password2); 

     //set listeners 
     editText1.addTextChangedListener(textWatcher); 
     editText1.addTextChangedListener(textWatcher); 

     // run once to disable if empty 
     checkFieldsForEmptyValues(); 


     TextView loginScreen = (TextView) findViewById(R.id.link_to_login); 
     loginScreen.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startActivity (new Intent(getApplicationContext(), DialogActivity.class)); 
       finish(); 
      } 
     }); 

    } 

    private void checkFieldsForEmptyValues(){ 
     Button b = (Button) findViewById(R.id.btnRegister); 

     String s1 = editText1.getText().toString(); 
     String s2 = editText2.getText().toString(); 

     if(s1.equals("") && s2.equals("")) 
     { 
      b.setEnabled(false); 
     } 

     else if(!s1.equals("")&&s2.equals("")){ 
      b.setEnabled(false); 
     } 

     else if(!s2.equals("")&&s1.equals("")) 
     { 
      b.setEnabled(false); 
     } 

     else 
     { 
      b.setEnabled(true); 
     } 
    } 
} 

如果我開始活動,它被禁用。但如果我輸入的東西,它有時會啓用,有時不會..我只是想啓用按鈕,如果兩個編輯文本字段不是空的。

+1

使用b.setEnabled(! s1.isEmpty()&&!s2.isEmpty());此外,AfterTextChanged可能對你更好 – Kuffs

回答

11

你的問題是在這裏:

//set listeners 
     editText1.addTextChangedListener(textWatcher); 
     editText1.addTextChangedListener(textWatcher); 

您沒有設置textWatcher到editText2,所以你總是檢查條件,如果你寫內editText1

+0

好趕上....... – Kuffs

+0

我多次閱讀代碼,空的條件不是最好的,但它是好的,所以問題是在其他地方:) – noni

+0

哦,該死的...... thx非常......現在起作用了 – androidBeginner

0

取而代之的是

if(s1.equals("") && s2.equals("")) 
    { 
     b.setEnabled(false); 
    } 

試試這個

if(s1.isEmpty() || s2.isEmpty()) 
    { 
     b.setEnabled(false); 
    } 

變化從& &這一切的驗證條件||

+3

也應該使用's1.isEmpty()'而不是's1.equals(「」)',儘管這是爲了性能和清晰度而不是正確性。 –

+0

您的朋友Tim B. isEmpty()效率更高 – Kirk

+0

我用||代替&&,但現在按鈕一直處於禁用狀態 – androidBeginner

3

你方法checkFieldsForEmptyValues是爲你做什麼太複雜,嘗試只是在做:

private void checkFieldsForEmptyValues(){ 
     Button b = (Button) findViewById(R.id.btnRegister); 

     String s1 = editText1.getText().toString(); 
     String s2 = editText2.getText().toString(); 

     if (s1.length() > 0 && s2.length() > 0) { 
      b.setEnabled(true); 
     } else { 
      b.setEnabled(false); 
     } 

} 
+0

它在開始時不起作用,我在兩個字段中鍵入它保持禁用狀態,然後我必須鍵入某物。在field1再次啓用 – androidBeginner

+0

看@noni的答案,他會告訴你你的錯誤。 – Andros

+0

是的我現在得到它,它現在的作品thx – androidBeginner

6

我知道這是舊的,但請記住,只需使用.isEmpty()將允許你只需要添加一個空格,按鈕將自動啓用。

改爲使用s1.trim().isEmpty || s2.trim().isEmpty()

或者,你可以這樣做:

String s1 = editText1.getText().toString().trim() String s2 = editText2.getText().toString().trim()

然後就檢查.isEmpty()

我不知道,但這是你想要做的,而且這個答案很可能無關緊要,但我想我只是指出了這一點。

3

一種不同的方式做這將是

b.setEnabled(!s1.trim().isEmpty() && !s2.trim().isEmpty()); 
2

您可能會解決這個問題更短:

@Override 
protected void onResume() { 
    super.onResume(); 
    TextWatcher tw = new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {} 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {} 

     @Override 
     public void afterTextChanged(Editable editable) { 
      updateSignInButtonState(); 
     } 
    }; 

    editLogin.addTextChangedListener(tw); 
    editPassword.addTextChangedListener(tw); 

}

private void updateSignInButtonState() { 
    buttonSignIn.setEnabled(editLogin.getText().length() > 0 && 
          editPassword.getText().length() > 0); 
} 
0

我的辦法是:

  1. button setEnabled(false)

  2. 我以前TextWatcherafterTextChanged功能監聽文本變化和 按鈕更新狀態

這裏是我的代碼:

TextWatcher tw = new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 
     updateSignInButtonState(); 
    } 
}; 

public void updateSignInButtonState() { 
    btnSubmit.setEnabled(edUsername.getText().length() > 0 && 
      edPassword.getText().length() > 0); 
}