検索条件の入力を表す editText があります。ユーザーがこの editText の編集を停止したことを検出する方法があるかどうかを知りたいので、データベースにリストのデータを照会できます。たとえば、ユーザーが「test」と入力した場合、テキストウォッチャーのようにユーザーが各文字を入力した後ではなく、ユーザーが単語を入力した後にのみ通知されるようにします。あなたはなにか考えはありますか?キープレスイベント間の経過ミリ秒を測定するためにタイマーを使用することは避けます。
8927 次
5 に答える
10
信じられないほどエレガントではありませんが、これでうまくいくはずです。
初期化:
long idle_min = 4000; // 4 seconds after user stops typing
long last_text_edit = 0;
Handler h = new Handler();
boolean already_queried = false;
テキスト ウォッチャーから呼び出されるランナブルをセットアップします。
private Runnable input_finish_checker = new Runnable() {
public void run() {
if (System.currentTimeMillis() > (last_text_edit + idle_min - 500)) {
// user hasn't changed the EditText for longer than
// the min delay (with half second buffer window)
if (!already_queried) { // don't do this stuff twice.
already_queried = true;
do_stuff(); // your queries
}
}
}
};
これをテキストウォッチャーに入れます:
last_text_edit = System.currentTimeMillis();
h.postDelayed(input_finish_checker, idle_min);
于 2013-03-19T10:56:27.593 に答える
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
DoStaff();
}
}
};
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 {
}
}
});
于 2016-07-22T10:21:41.193 に答える
0
editText
にテキストがあるかどうかを確認する最も簡単な方法(1 回のみ) は、次のようにします。
private boolean newState;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.somLayout);
edt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (!editable.trim().isEmpty()) {
checkIsTyping(true);
} else {
checkIsTyping(false);
}
}
});
}
private void checkIsTyping(boolean typeState) {
if (newState != typeState) {
Toast.makeText(appCompatActivity, "typingState " + newState,
Toast.LENGTH_SHORT).show();
}
newState = typeState;
}
于 2020-09-01T10:59:48.383 に答える