1

アプリに問題があります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);
        }
    }
};

この方法を改善する場所はありますか?またはそれは実際に効果的な方法ですか?

4

1 に答える 1

-1

遅延 Handlerを追加し、onTextchanged が呼び出されるたびにハンドラーから前のメッセージを削除し、1 秒の遅延で投稿を続けます。1 秒以内に ontextChanged が呼び出された場合、前の Dosearch はキャンセルされます

于 2012-08-02T11:03:01.113 に答える