14

私のアプリケーションでは、TextWatcher を EditText に配置しました。EditText のテキストを変更すると、TextWatcher のイベントが 2 回呼び出されます。

アプリの実行にエミュレーターを使用しています。

4

3 に答える 3

10

あなたのコードはどのように見えますか? これが TextWatcher の通常の動作です。例:

myInput.addTextChangedListener(new TextWatcher() {
        boolean mToggle = false;

        public void onTextChanged(CharSequence cs, int s, int b, int c) {}

        public void afterTextChanged(Editable editable) {
            if (mToggle) { 
                Toast.makeText(getBaseContext(), "HIT KEY",Toast.LENGTH_LONG).show();
            }
            mToggle = !mToggle;
        }

        public void beforeTextChanged(CharSequence cs, int i, int j, int k) {}
    });
于 2012-08-22T14:55:26.590 に答える
0

リスナー内 (editText.setText("string")メソッド内など) で呼び出した場合、 は新しいテキストの変更を検出し、再度呼び出してループを作成する可能性があります。TextWatcherafterTextChangedTextWatchersetText

代替手段editText.setText("string")は次のとおりです。

editText.getText().clear();
editText.append("string");

TextWatcherリスナーによる新しい検出を呼び起こすことはありません。

于 2020-06-03T18:15:22.373 に答える