2

次の TextWatcher 定義があります。

   _textWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(final Editable s) {
            if (!s.toString().equals(_prev)) {
                afterTextHandler.removeCallbacks(work);
                work = new Runnable() {
                    @Override
                    public void run() {                            
                        if (!s.toString().equals(_prevQuoteAmount)) {
                            _prev = s.toString();
                            doSomething();
                        }
                        _et.append("");                            
                    }
                };
                afterTextHandler.postDelayed(work, 1000);
            }
            _et.append("");                
        }
    };

すべてが期待どおりに機能します (doSomething() が実行される場合と実行されない場合があるため、その実行は質問とは関係ありません) が、このウォッチャーがアタッチされている EditText コンポーネントにユーザーがテキストを入力した後、テキストのカーソルEditText の先頭に戻ります。

onTextChanged() の実行 (またはそのハンドラ run() の実行) 後に表示される次のログがあります。

12-08 13:10:55.777 1855-1855/com.android.inputmethod.latin I/LatinIME: 入力を開始します。カーソル位置 = 4,4

onTextChanged() の実行直後に EditText のカーソルが EditText の先頭に置かれるのはなぜですか?

編集 1: _et.append("") は、カーソルをテキストの最後の場所に移動するハックです。ここでは機能しません (他の場合には機能しますが)。

編集 2: doSomething に関する要求された知識:

    if (isReady()) {
        Sender objSender = new Sender();
        objSender.setParam1(_tvParam1.getText().toString());
        objSender.setParam2(_tvParam2.getText().toString());
        objSender.setParam3(_et.getText().toString());
        Service.startActionSend(getActivity(), quote);
    }

isReady() - ネットワーク要求を行う前に条件 (_tvParam1、_tvParam2、_et) をチェックします。Service.startActionSend() - 非同期ネットワーク リクエストの作成 (IntentService を使用)。

編集 3: この問題は、ハンドラーの run() メソッドに入ったときにのみ発生します。

4

4 に答える 4

1

doSomething() 内で何をしているのかわかりませんが、それが何らかの形でカーソルの位置を変更している場合は、次の(ハック)を使用してカーソルを入力テキストの最後に移動できます。

mEdittext.setSelection(mEdittext.length());

于 2016-12-08T13:23:58.253 に答える