ミルクティーと雑記

ミルクティーとプログラミングと趣味と雑記

TextWatcherで確定済みの文字列だけ取得する

EditTextに入力されている内容や文字数を追う際、下記のようにTextWatcherをaddすると思います。

その時、IMEで入力中のものは除き既に確定しているもののみ取得したい時、どのコールバックの引数を参照すればいいかメモ。

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        Log.d("[TextWatcher]", "beforeTextChanged s=" + s + ", start=" + start 
                                            + ", count=" + count + ", after=" + after);
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Log.d("[TextWatcher]", "onTextChanged s=" + s + ", start=" + start 
                                            + ", count=" + count);
        }

    @Override
    public void afterTextChanged(Editable s) {
        Log.d("[TextWatcher]", "afterTextChanged s=" + s);
    }
});


色々入力してみながらログ確認。

// 「あ」を入力し未確定
D/[TextWatcher]: beforeTextChanged s=, start=0, count=0, after=1
D/[TextWatcher]: onTextChanged s=あ, start=0, count=1
D/[TextWatcher]: afterTextChanged s=あ

// 「あ」を確定
D/[TextWatcher]: beforeTextChanged s=あ, start=0, count=1, after=1
D/[TextWatcher]: onTextChanged s=あ, start=0, count=1
D/[TextWatcher]: afterTextChanged s=あ

// 「い」を追加入力し未確定
D/[TextWatcher]: beforeTextChanged s=あ, start=1, count=0, after=1
D/[TextWatcher]: onTextChanged s=あい, start=1, count=1
D/[TextWatcher]: afterTextChanged s=あい

// 「い」を確定
D/[TextWatcher]: beforeTextChanged s=あい, start=1, count=1, after=1
D/[TextWatcher]: onTextChanged s=あい, start=1, count=1
D/[TextWatcher]: afterTextChanged s=あい

// 「あ」と「い」の間にカーソルを移動し、「あ」を入力し未確定
D/[TextWatcher]: beforeTextChanged s=あい, start=1, count=0, after=1
D/[TextWatcher]: onTextChanged s=ああい, start=1, count=1
D/[TextWatcher]: afterTextChanged s=ああい