2012-03-02 7 views
0

私は、ユーザーが外でクリックしたときに、私は価値にいくつかの検証を行うことができるように私のEditTextにOnFocusChangeListenerを追加、またはのうち、タブ、のEditTextビュー:onFocusChange()textChanged(のように働く)

EditText myEditText = (EditText) itemView.findViewById(R.id.myedittext); 
    myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View view, boolean hasFocus) { 
    EditText editText = (EditText)view; 
    if (!hasFocus) { 
     validate(editText.getText().toString()); 
    } 
    } 
} 

しかし、onFocusChange()メソッドはtextChanged()メソッドのように呼び出されているようです。テキストフィールドに何かを入力するたびに呼び出されます。私は2.2シミュレータと私自身のハードウェアデバイスの両方でこれを試してみました。

OnFocusChangeListenerがどのように機能するのか、なぜそれが私のために働くのかについての洞察があります。

ありがとうございます。

答えて

1

まず、onFocusChangeメソッドでEditText editTextを再宣言する必要はありません。 myEditTextは、onCreateメソッドで設定されているクラス変数である必要があります。あなたのコードは2つの別々のインスタンスを扱っていると思います。

そしてOnEditorActionListener

myEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if (actionId == EditorInfo.IME_ACTION_DONE) { 
      validate(myEditText.getText().toString()); 
      return true; 
     } 
     return false; 
    } 
}); 
0

を追加してみてください私はまた、問題が発生したテキストが変更EditTextと一緒onFocusChange()の取り扱いについての詳細情報を見つかりませんでした。

が呼び出されるたびにonFocusChange()が呼び出されると確信しています。私の場合は、入力が完了した後に入力テキストを検証したい、またはhasFocus()がfalseを返すようにしたいと思います。その検証の後、テキストagianを設定します。したがって、これら2つのプロセスonFocusChange()[editText].setText()は互いに干渉しています。この

meditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 

       yourcalc(); 

       return true; 
      } 
      return false; 
     } 
    }); 
のようなものを使用することにより

ソリューションKnowing when Edit text is done being edited

関連する問題