我在我的操作欄中有一個SearchView
。當用戶搜索查詢並按下鍵盤上的「開始」按鈕時,搜索意圖會傳遞給我的活動,但搜索字段會崩潰並且查詢文本會丟失。我怎樣才能防止這種情況發生?我希望文本保留在搜索字段中,直到用戶明確清除。如何在搜索的SearchViews文本字段中保留搜索文本?
感謝
我在我的操作欄中有一個SearchView
。當用戶搜索查詢並按下鍵盤上的「開始」按鈕時,搜索意圖會傳遞給我的活動,但搜索字段會崩潰並且查詢文本會丟失。我怎樣才能防止這種情況發生?我希望文本保留在搜索字段中,直到用戶明確清除。如何在搜索的SearchViews文本字段中保留搜索文本?
感謝
我的解決方案竟然很簡單。顯然,我沒有正確設置活動的android:launchMode
。理想情況下,提供搜索功能的活動應該是單個頂部,因此用戶在單擊「返回」按鈕時不必在以前的所有搜索中向後導航。我的不是。因此,每次搜索時,我的搜索活動的新實例都已啓動並添加到視圖堆棧中。
我在正確的活動下將其添加到我的清單文件中。
android:launchMode="singleTop"
可以存儲在一個字符串搜索請求可變或在shared Preferences當「轉到」按鈕是通過使用getQuery()點擊時搜索事件happends(setOnSearchClickListener),然後將它們寫回在either as the Query (setQuery) or as a hint (setQueryHint)。
編輯
你怎麼能存儲查詢字符串,如果該活動是每一個搜索後重新創建(你可以閱讀這個回答以下問題基礎)?如果你的應用程序運行時有一些服務需要存儲,但那不是那麼優雅。最簡單的方法是使用SharedPreferences。這是一個persitant(key,value)存儲,您可以在整個應用程序中使用它來存儲和檢索值。
你開始與
SharedPreferences prefs = getSharedPreferences("mysharedprefenrences", 0);
字符串a SharedPreference可以是你想要的任何東西。每當您使用相同的字符串在應用程序中創建SharedPreferences對象時,您將再次訪問這些值。
得到一個字符串,只需在搜索查詢,使用
String aString = prefs.getString("searchQuery", "")
與第二個字符串是默認,如果查詢沒有被設定(在這種情況下,「」)。
當setOnSearchClickListener通過時,您可以使用編輯器存儲查詢。
Editor editor = prefs.edit();
editor.putString("searchQuery", queryString);
editor.commit();
現在下一次創建活動,而不是默認的字符串,您的存儲的字符串將被找到。
+1從我身邊! – Swayam
HI Lukas,我在我的Activity中添加了'onQueryTextChange'和'onQueryTextSubmit'方法,並用於'SearchView.setOnSearchClickListener'來將偵聽器設置爲'this'。每次按下按鍵,每次提交文本時,我都可以獲取該事件,但似乎在創建搜索時,會創建一個新的活動實例,而且我無法再引用這些相同的變量。我應該在哪裏編寫'SearchView.getQuery()'方法?你能否提供一些例子。我已經完全失去了搜索的東西。謝謝。 –
我已經添加了一個編輯來反映這個問題。 –