SearchView
アクションバーに があります。ユーザーがクエリを検索してキーボードの [Go] ボタンを押すと、検索インテントがアクティビティに渡されますが、検索フィールドが折りたたまれ、クエリ テキストが失われます。どうすればこれを防ぐことができますか? ユーザーが明示的にクリアするまで、テキストを検索フィールドに残しておきたいと思います。
ありがとう
検索イベントが発生したとき (setOnSearchClickListener) に getQuery() を使用して「Go」ボタンがクリックされたときに、検索要求を文字列変数または共有設定に保存し、それらをクエリ (setQuery) として書き戻すことができます。またはヒントとして (setQueryHint)。
編集(この回答の下で読むことができる質問に基づいて)
検索のたびにアクティビティが再作成される場合、クエリ文字列をどのように保存できますか? アプリケーションの実行時に永続的なサービスがある場合は、そこに保存できますが、それほどエレガントではありません。これを行う最も簡単な方法は、 SharedPreferencesを使用することです。これは、値を保存および取得するためにアプリ全体で使用できる永続的な (キー、値) ストレージです。
でSharedPreferenceを開始します
SharedPreferences prefs = getSharedPreferences("mysharedprefenrences", 0);
文字列は何でもかまいません。アプリで同じ String を使用して SharedPreferences-Object を作成すると、これらの値に再びアクセスできるようになります。
検索クエリのように文字列を取得するには、次を使用します
String aString = prefs.getString("searchQuery", "")
クエリがまだ設定されていない場合は、2 番目の文字列がデフォルトになります (この場合は "")。
setOnSearchClickListener が制定されると、エディターを使用してクエリを保存できます。
Editor editor = prefs.edit();
editor.putString("searchQuery", queryString);
editor.commit();
次にアクティビティが作成されると、デフォルトの文字列の代わりに、保存された文字列が見つかります。
私の解決策は非常に単純であることが判明しました。どうやら、android:launchMode
アクティビティに適切に設定していませんでした。理想的には、検索機能を提供するアクティビティは 1 つのトップにする必要があります。これにより、ユーザーは [戻る] ボタンをクリックしたときに以前のすべての検索をさかのぼる必要がなくなります。私はそうではありませんでした。したがって、検索するたびに、検索アクティビティの新しいインスタンスが開始され、ビュー スタックに追加されました。
これをマニフェスト ファイルの正しいアクティビティの下に追加しました。
android:launchMode="singleTop"