2017-09-30 9 views
2

私は、彼らがかそうでないかどうかを確認/検証する(など名前アドレス、など)いくつかのEditTextのフィールドを持っています。それらのすべてが満たされている場合、私は私に設定したいボタンを入力を入力します。いずれかのフィールドが空白の場合は、 Enterボタンを無効にします。ボタンを有効にする前にすべてのEditTextフィールドを検証していますか?

以下のコードを書いていますが、自分のボタンがではなく、すべてのフィールドが既に入力されていてもが有効になっていません。私は条件が満たされているかどうかを判断するブール変数の束を使用しています。

アプリが正常に実行されてからどこがうまくいかなかったのか分かりませんが、自分のフィールドの1つまたはすべてが空の場合にEnterボタンを無効にしたいという希望の結果が表示されません。

マイ変数:

boolean filledName, filledAddress = false; //These variables will determine if my fields are empty or not 
EditText name, address; 
Button btnEnter; 

私のonCreate:私のonCreate内部

protected void onCreate(Bundle savedInstanceState) { 

... 
//Get views from layout xml via IDs 
name = (EditText) findViewById(R.id.name); 
address = (EditText) findViewById(R.id.address); 
btnEnter = (Button) findViewById(R.id.btnEnter); 

btnEnter.setEnabled(false); //initialize the Enter button to be disabled on Activity creation 

... 

そして、私の追加テキスト変更リスナー:

name.addTextChangedListener (new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int i, int i1, int i2){ 
     if (!(name.toString().trim().isEmpty())) 
      filledName = true;  //if name field is NOT empty, filledName value is true 
    } 
    .... 
    //other implemented abstract codes here 
}); 

address.addTextChangedListener (new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int i, int i1, int i2){ 
     if (!(address.toString().trim().isEmpty())) 
      filledAddress = true;  //if address field is NOT empty, filledAddress value is true 
    } 
    .... 
    //other implemented abstract codes here 
}); 

//This should set the Enter button to enabled once all the boolean conditions are met 
//but for some reason it's not working 
if (nameFilled == true && addressFilled == true) 
    btnEnter.setEnabled(true); 

} //end of onCreate() 

答えて

1

用を持っている私は、ブール値を保存することはお勧めしませんフィールドが再び空のときにもfalseに変更する必要があるためです。

私はこれを行うには優れていると思う:

protected void onCreate(Bundle savedInstanceState) { 
    //...... 

    name.addTextChangedListener (new TextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence s, int i, int i1, int i2){ 
      checkRequiredFields(); 
     } 
    }); 

    address.addTextChangedListener (new TextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence s, int i, int i1, int i2){ 
      checkRequiredFields(); 
     } 
    }); 

    //...... 
} 

private void checkRequiredFields() { 
    if (!name.getText().toString().isEmpty() && !address.getText().toString().isEmpty()) { 
     btnEnter.setEnabled(true); 
    } else { 
     btnEnter.setEnabled(false); 
    } 
} 
1

あなたのonCreate()一度だけ呼ばれ、アクティビティが作成されているとき。したがって、ボタンを有効にするコードは、開始時(フィールドが空のとき)に1回実行され、実際にそれらのEditTextが作成されたときに再び表示されることはありません。これらの行は、それぞれのTextChangedListeners内から呼び出すことができる別のメソッドに入れる必要があります。したがって、たとえば、新しい方法

private void checkFields() { 
    if (nameFilled == true && addressFilled == true) 
     btnEnter.setEnabled(true); 
} 

とあなたのリスナー

name.addTextChangedListener (new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int i, int i1, int i2){ 
     if (!(name.toString().trim().isEmpty())) 
      filledName = true;  //if name field is NOT empty, filledName value is true 
     checkFields(); 

    } 

(当然、他のいずれかで同じことをやって)

+0

、それが働いている間、私は、ユーザーが唯一の空白空白を入力し、および/または、彼らはそれがまだ有効に何かを入力した後、そのエントリを削除した場合の別の問題に遭遇した:あなたはこのようにそれを行うことができますボタン。それを防ぐための何かがありますか?または何らかの理由でボタンをもう一度無効にしますか? – 5120bee

+1

これらのすべては、入力されたテキストを検証するメソッドから処理できます。既存のcheckFields()メソッドは、無効にして有効にすることもできます。あなたがテキストに満足していない場合は、最初に有効にすることができません。 – Reg

0

私はあなたのようないくつかの問題は、あまりにも、私はしばらくあきらめ、これをしませんでした。あなたのボタンを無効にすることはありませんが、編集テキストが空であれば別のアクティビティに行くことはできません。これがあなたが探しているものかどうかは分かりませんが、それがあなたを助けてくれることを願っています! Juan Cruz Solerは正しいです、ブール値を保存しないでください。私はちょうどあなたのコードを試してみました

protected void onCreate(Bundle savedInstanceState) { 


name = (EditText) findViewById(R.id.name); 
address = (EditText) findViewById(R.id.address); 
btnEnter = (Button) findViewById(R.id.btnEnter); 
btnEnter.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if (name.getText().toString().trim().equals("") || 
        address.getText().toString().trim().equals("")){ 

       Toast.makeText(getApplicationContext(), "No data input", Toast.LENGTH_LONG).show(); 
      }else { 

       Intent intent = new Intent(getApplicationContext(), theActivityYouWantToGo.class); 
       startActivity(intent); 
      } 

     } 
関連する問題