web-dev-qa-db-ja.com

EditTextのテキストウォッチャーの実装

EditTextを持っています。クリックするとフォーカス可能になります。 EditTextに入力する入力テキストを入力します。 EditTextのリスナーを実装したいので、入力をやめると、ボタンの代わりにテキストがデータベースに自動的に保存されます。 EditTextのリスナーで入力が停止したかどうかをリッスンするにはどうすればよいですか?

16

edittext imeOptionを設定します

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

このようなものを使うことで、

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            // Specify your database function here.
            return true;
        }
        return false;
    }
});

または、OnEditorActionListenerインターフェイスを使用して、匿名の内部クラスを回避できます。

16
vajapravin

このようにしてみてください。

EditText et = (EditText)findViewById(R.id.editText);
Log.e("TextWatcherTest", "Set text xyz");
et.setText("xyz");

et.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) { }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    @Override
    public void afterTextChanged(Editable s) {
        Log.e("TextWatcherTest", "afterTextChanged:\t" +s.toString());
    }
});
53
jainal

これをeditTextに追加

et1.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            // TODO Auto-generated method stub
        }

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

            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable s) {

            // TODO Auto-generated method stub
        }
    });
5

また、Rx Javaのdebounce演算子を使用できます。

subject.debounce(300, TimeUnit.MILLISECONDS)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .map(yourString -> {
                           // save to db
                        }
                        return "";
                    })
                    .subscribe()

ここでは、dbに保存する時間を制限した後、制限時間を定義できます。

0
pandey_shubham