我有一个 EditText。当我点击它时,它变得可聚焦。我将键入要输入到 EditText 中的输入文本。我想为 EditText 实现一个监听器,这样当我停止输入时,它应该自动将该文本保存到数据库中,而不是有一个按钮。如何让 EditText 的监听器来监听输入是否停止?
问问题
38853 次
4 回答
60
像这样试试。
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());
}
});
于 2012-01-02T10:13:42.400 回答
18
设置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
接口来避免匿名内部类。
于 2012-05-16T13:03:51.520 回答
7
将此添加到您的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
}
});
于 2016-09-24T06:19:40.840 回答
0
您也可以使用Rx java 的debounce运算符。
subject.debounce(300, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(yourString -> {
// save to db
}
return "";
})
.subscribe()
在这里您可以定义时间限制,在您希望它保存在数据库中的时间之后。
于 2020-03-31T17:06:04.003 回答