我的Android应用程序中有一个EditText,我在其中使用addTextChangedListener将文本保存到数据库。 但是,每当用户输入键时,事件就会触发。我觉得这是不必要的。
您能告诉我一种更好的方式来在用户完成输入后保存文本吗?
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//Sure Not here...
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Saving text from here ??
}
@Override
public void afterTextChanged(Editable s) {
//Saving text from here ??
}
});
答案 0 :(得分:2)
要提高性能,您可以在每种类型后触发查询时使用延迟,请尝试以下操作:
editText.addTextChangedListener(object : TextWatcher {
private var timer = Timer()
private val DELAY: Long = 300 // milliseconds, 300 are enough
override fun afterTextChanged(s: Editable?) {}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
timer.cancel()
timer = Timer()
timer.schedule(
object : TimerTask() {
override fun run() {
// perform your task here
if (s!!.length > 2 || s.isEmpty()) {
// or you can use this character limit check optionally
}
}
}
},
DELAY
)
}
})
谢谢
答案 1 :(得分:2)
最好将输入文本保存在失去焦点的位置,这将确保用户已完成编辑并从该输入字段移出。
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
// save your data , editText.getText()
}
}
});