私のWP8アプリケーションでは、TexBoxのテキストが変更されたときに検索する検索メソッドを使用しています。今、私はこの検索を変更する必要があります。ユーザーがTextBoxにすばやく入力すると、ユーザーが入力した後にのみ検索が実行されます。つまり、検索メソッドは、変更されたテキストごとに実行されるべきではありません。出来ますか?Pleseは私を助けてくれます
2 に答える
出来ますか?
絶対。基本的にはタイマーが必要です。つまり、キーストロークごとにタイマーが必要です。
これを行う最も簡単な方法は、おそらく次のように言うことです。
- ユーザーがキーを押すたびに、タイマーを開始します。タイマーは、この時点ですでに入力されているテキストを記憶している必要があります。
- タイマーが作動したときに、現在のテキストが「タイマー開始時のテキスト」と同じである場合は、検索を実行します。
これの潜在的な欠点の1つは、ユーザーが「foo」と入力するとタイマーが開始し、ユーザーが「d」と入力してからその「d」を削除した後、タイマーが起動すると、入力後のアクティビティにもかかわらず検索が実行されることです。 。それが望ましくないと判断した場合int
は、代わりにカウンターを維持するだけで済みます。キーストロークが何回あったかを言うだけです。タイマーが開始したとき、およびタイマーが起動したときにカウントが以前と同じであるかどうかを確認することを忘れないでください。
または、検索が非同期で安価であると仮定して、すべてのキーストロークで検索を開始します...ただし、結果が返されたら、ユーザーがそれ以降に入力した場合は検索を完全に無視するか、結果をローカルで検索結果に絞り込みます。新しいクエリテキストでも引き続き有効です。
(代わりに、単一のタイマーで問題に取り組むことができます。たとえば、ユーザーが入力すると、タイマーが開始されるか、起動時間が遅れます。個人的には、もっと複雑だと思いますが、それはあなた次第です。)
非同期通信方法であり、非同期アクティビティに対して多くの抽象化を提供するReactive拡張ライブラリの使用を考えることができます。これはプッシュベースのメカニズムです。つまり、データが利用可能になるたびに、関心のあるサブスクライバーに通知されます。発行リクエストのキャンセルなどに対応しています。例については、 101Rxをご覧ください。