0

OnFocusChangeListener を EditText に追加して、ユーザーが EditText ビューの外側をクリックしたり、タブを押したりしたときに値を検証できるようにしました。

  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 がどのように機能するか、およびなぜそれが私のように機能するかについての洞察をいただければ幸いです。

前もって感謝します。

4

2 に答える 2

1

まず、メソッドで EditText editText を再宣言する必要はありませんonFocusChange。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;
    }
});
于 2012-03-02T15:54:50.720 に答える
0

私もこの問題に遭遇し、テキストの変更onFocusChange()とともに処理に関する詳細情報が見つかりませんでした。EditText

onFocusChange()呼ばれるたびに必ず[editText].setText()呼ばれます。私の場合、入力が完了した後、または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;
        }
    });
于 2014-06-20T09:55:42.403 に答える