アプリに問題がありますEditTextフィールドをスパムした後にクラッシュします「DoSearch」を実行する前にコードに遅延を追加するにはどうすればよいですか?
つまり、EditBoxが編集されると、アプリケーションは1秒間アイドル状態になり、trueの場合は再度編集された場合はリッスンし、falseの場合はさらに1秒間待機し、DoSearchを実行する必要があります。
私の状況をご理解いただければ幸いです
et = (EditText) findViewById(R.id.Searchfield);
et.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) { }
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
public void onTextChanged(CharSequence s, int start, int before, int count) {
new DoSearch().execute();
}
});
編集:わかりました。テキストエディットが変更されるたびにint searchCountを0として定義する問題を解決しました。これは、遅延ハンドラー遅延ハンドラーと呼ばれます。searchCountが最後と等しいかどうかを確認することにより、最後の遅延ハンドラー呼び出しでのみDoSearchを実行します。
et = (EditText) findViewById(R.id.SearchCoupon);
et.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) { }
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
public void onTextChanged(CharSequence s, int start, int before, int count) {
searchCount++;
SearchHandler.sendMessageDelayed(SearchHandler.obtainMessage(searchCount), 1000);
}
});
private Handler SearchHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if(msg.what == searchCount) {
new DoSearch().execute();
System.out.println("Success" + searchCount + "=" + msg.what);
}
else {
System.out.println(msg.what + " - " + searchCount);
}
}
};
この方法を改善する場所はありますか?またはそれは実際に効果的な方法ですか?