EditText と ListView を含む画面があります。EditText に入力すると、AsyncTask が起動され (既存の AsyncTask はすべてキャンセルされて破棄されます)、ListView に表示するデータをローカルでクエリします。EditText にテキストが含まれていない場合、すべてのデータが照会されて表示されます。基本的に、EditText は画面上のデータのフィルターです。これは簡単です。addTextChangedListener では、以前の AsyncTask をキャンセルし、新しいタスクを起動して、それに s.toString() を渡すだけです。
ユーザーがバックスペースを押して EditText 内のテキストを消去すると、デフォルトの動作 (すべてのデータがリストに入力される) が必要になります。これは、addTextChangedListener の現在の実装で動作します。
ただし、EditText の右側にも X ボタンがあります。これは、EditText ( EditText.setText("");
) をクリアするためのものです。これは特殊なケースです。この場合、クエリを発生させたくありません。問題は、 addTextChangedListener がこれを知るほど賢くないように見えることです。テキストが変更され、すべてのデータが照会されるため、トリガーされます。
これを防ぐにはどうすればよいですか?