EditTextを持っています。クリックするとフォーカス可能になります。 EditTextに入力する入力テキストを入力します。 EditTextのリスナーを実装したいので、入力をやめると、ボタンの代わりにテキストがデータベースに自動的に保存されます。 EditTextのリスナーで入力が停止したかどうかをリッスンするにはどうすればよいですか?
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
インターフェイスを使用して、匿名の内部クラスを回避できます。
このようにしてみてください。
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());
}
});
これを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
}
});
また、Rx Javaのdebounce演算子を使用できます。
subject.debounce(300, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(yourString -> {
// save to db
}
return "";
})
.subscribe()
ここでは、dbに保存する時間を制限した後、制限時間を定義できます。