2012-04-19 5 views
0

ここでの目標は、ユーザーが連絡先情報を入力し、最終的に各フィールドに自動フォーマット(大文字、スペルなど)を適用する際に、各フィールドを検証することです。テキストフィールドで検証を実行する方法

私は以下のコードを使用してほぼ動作していますが、キーストップコールバックに基づいています。実際にトリガーしたいのは、各テキストフィールドの "フォーカスの喪失"です。何か案は?

public TextFormValidationCallback (CustomerFormActivity faja, String editTextName, Context context, EditText textField, 
            Button button, int rule) { 
    this.button = button; 
    this.textField = textField; 
    this.context = context; 
    this.ruleResourceId = rule; 
    this.editTextName = editTextName; 
    this.faja = faja; 
    this.res = context.getResources(); 
} 

public boolean onEditorAction(TextView v, int keyCode, KeyEvent event) { 
    if (event != null) { 

     // If the event is a key-down event on the "enter" button 
     if ((event.getAction() == KeyEvent.ACTION_DOWN) 
       && (keyCode == KeyEvent.KEYCODE_ENTER)) { 
      // Perform action on key press 
      Log.i("TextFormValidation", 
        "TextFormValidation callback activated!"); 
      if (validateTextFieldNotNullData(this.textField) 
        && (validateTextFieldFormat(this.textField, 
          ruleResourceId))) { 
       faja.setFieldValidationArray(getHeadingIndex(editTextName), 
         true); 
       if (faja.sumFieldValidations()) { 
        button.setClickable(true); 
        button.setText(R.string.addCustomer); 
       } 
      } else { 
       button.setText(R.string.next); 
       button.setClickable(false); 
      } 
      return true; 
     } 
    } else { 
    } 
    return false; 
} 
+0

は、あなたのクリックイベント内の他のコントロール上のSetFocus()にしてみてください。 –

+1

View.setOnFocusChangeListener()を試しましたか? – gngr44

答えて

0

これはおそらくあなたが探しているものでしょうか? TextView.onWindowFocusChanged()

+0

私はそうは思っていません(ドキュメントを読むことから)、私は別のコールバックを書いて確実に確認します。 – cknowlto

+0

onWindowFocusChanged()で見つかるリスナーはなく、フォーカスを失うのはeditorActionではありません。 – cknowlto

0

いいえ、私はこれを昨日投稿できませんでしたが、わかりました。他の人をこのfacepalmの瞬間から救うために、ここに固定コードを掲示します。

public class TextFormValidationCallback implements OnFocusChangeListener { 

private Button button; 
private EditText textField; 
private Integer ruleResourceId; 
private Resources res; 
private Context context; 
private String editTextName; 
private CustomerFormActivity faja; 

public TextFormValidationCallback (CustomerFormActivity faja, String editTextName, Context context, EditText textField, 
            Button button) { 
    this.button = button; 
    this.textField = textField; 
    this.context = context; 
    this.editTextName = editTextName; 
    this.res = context.getResources(); 
    this.ruleResourceId = R.string.validates_everything; 
    this.faja = faja; 
} 

public TextFormValidationCallback (CustomerFormActivity faja, String editTextName, Context context, EditText textField, 
            Button button, int rule) { 
    this.button = button; 
    this.textField = textField; 
    this.context = context; 
    this.ruleResourceId = rule; 
    this.editTextName = editTextName; 
    this.faja = faja; 
    this.res = context.getResources(); 
} 

public void onFocusChange(View v, boolean hasFocus) { 

    Log.i("TextFormValidation", "TextFormValidation callback activated!"); 
    if (! hasFocus) { 
     if (validateTextFieldNotNullData(this.textField)) { 
      if (validateTextFieldvsFormat(this.textField, ruleResourceId)) { 
       faja.setFieldValidationArray(getHeadingIndex(editTextName), true); 
      } 
     } 
     if (faja.sumFieldValidations()) { 
      button.setClickable(true); 
      button.setText(R.string.addCustomer); 
     } 
     else { 
      button.setText(R.string.next); 
      button.setClickable(false); 
     } 
    } 
} 

}

関連する問題