EditText Androidでユーザーが入力を止めたかどうかを検出する方法 質問する

EditText Androidでユーザーが入力を止めたかどうかを検出する方法 質問する

レイアウトにEditTextフィールドがあります。ユーザーがそのEditTextフィールドで入力を止めたときにアクションを実行したいです。TextWatcherを実装し、その機能を使用しています。

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }


@Override
public void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { } 

@Override
    public void afterTextChanged(Editable editable) {

    }

この関数onTextChangedafterTextChanged任意の文字を入力した直後に呼び出されますが、Facebook の「チェックイン」ページと同じように、ユーザーが edittext フィールドへの入力を終了した後にアクションを実行したいと考えています。

これをどのように実装できますか?

ベストアンサー1

これは私がやった方法であり、私にとってはうまくいきました!

long delay = 1000; // 1 seconds after user stops typing
long last_text_edit = 0;
Handler handler = new Handler();

private Runnable input_finish_checker = new Runnable() {
    public void run() {
        if (System.currentTimeMillis() > (last_text_edit + delay - 500)) {
            // TODO: do what you need here
            // ............
            // ............
            DoStuff();
        }
    }
};

EditText editText = (EditText) findViewById(R.id.editTextStopId);
editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged (CharSequence s,int start, int count,
    int after){
    }
    @Override
    public void onTextChanged ( final CharSequence s, int start, int before,
    int count){
        //You need to remove this to run only once
        handler.removeCallbacks(input_finish_checker);

    }
    @Override
    public void afterTextChanged ( final Editable s){
        //avoid triggering event when text is empty
        if (s.length() > 0) {
            last_text_edit = System.currentTimeMillis();
            handler.postDelayed(input_finish_checker, delay);
        } else {

        }
    }
}

);

おすすめ記事