SearchView提示不显示单个字符input

我正在使用Scala编写的Android应用程序,该应用程序在android.support.v7.widget.SearchView覆盖的操作栏中使用android.support.v7.widget.Toolbar

在应用程序中,我需要为该SearchView启用searchbuild议。 所以,每次检测到查询更改时,我都会检查是否需要更新build议(下面的代码)。 如果需要更新build议,则会调用后端,并创build一个包含searchbuild议的android.database.MatrixCursor ,并在SearchView的build议适配器(以下代码)上进行设置。

我遇到的问题是,在input单个字符时,search提示不会显示出来。 在search框中键入两个或多个字符完美地工作。

我已经试过android:searchSuggestThreshold设置为01在我的XMLconfiguration,我得到了相同的结果(如该选项被忽略):search提示显示多个input字符,但不显示单个字符。

我在configuration/初始化的SearchView缺less的东西? 像一个选项,而不是android:searchSuggestThreshold ,我可以设置? 我花了最后几个小时寻找替代选项,但找不到任何。

我所看到的一个可能的解决scheme是获取支持SearchView的input的AutoCompleteTextView ,并将其阈值设置为1,但由于AutoCompleteTextView没有被SearchView的API公开,所以这是一个丑陋的(黑客)解决scheme。

有谁知道这个优雅的解决scheme?

谢谢!

检测search项更改:

 //this gets called whenever something is changed in the search box. "s" contains the entire search term typed in the search box def onQueryTextChange(s: String): Boolean = { //this checks to see if a call should be made to the backend to update suggestions SearchSuggestionController.query(s) //return false as we're not consuming the event false } 

更新searchbuild议:

 def updateSuggestions(suggestions: Array[String]): Unit = { val cursor = new MatrixCursor(Array(BaseColumns._ID, SearchManager.SUGGEST_COLUMN_TEXT_1), suggestions.length) for{ i <- suggestions.indices s = suggestions(i) } cursor.addRow(Array[AnyRef](i.toString, s)) getActivity.runOnUiThread(() => { searchSuggestionAdapter.changeCursor(cursor) searchSuggestionAdapter.notifyDataSetChanged() }) } 

菜单SearchView初始化:

 override def onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) = { inflater.inflate(R.menu.menu_products, menu) val searchManager = getActivity.getSystemService(Context.SEARCH_SERVICE).asInstanceOf[SearchManager] val actionItem = menu.findItem(R.id.action_search) searchView = MenuItemCompat.getActionView(actionItem).asInstanceOf[SearchView] searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity.getComponentName)) searchView.setSubmitButtonEnabled(false) SearchSuggestionController.onSuggestionsProvided_=(updateSuggestions) searchView setSuggestionsAdapter searchSuggestionAdapter searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { //... //change listener for detecting search changes presented above //... } //... //initialise other components //... } 

可search的configuration:

 <?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/actionbar_products_search_hint" android:searchSuggestThreshold="0" android:searchSuggestSelection=" ?"/> 

Related of "SearchView提示不显示单个字符input"

你必须得到SearchView对象所使用的SearchAutoComplete对象的句柄,然后实际地将它的阈值设置为1.(如果你试图将它设置为0,它将变成1,它将在幕后执行),不幸的是,它不能从XML一些原因。

 SearchView.SearchAutoComplete mSearchSrcTextView = (SearchView.SearchAutoComplete) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); // show results from 1 char mSearchSrcTextView.setThreshold(1); 

我在这里看到你对“优雅的解决scheme”的观点,这是非常好的,但是恐怕如果你想实现你的目标,恐怕Android API会迫使你多次做“不雅”

我不知道在AutoCompleteTextView作品上直接设置阈值的解决方法,但是如果没有,我build议你做一个( 不是很好 )一步更多这可能工作:

获取EditText的实例:

 AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); 

并强制在onQueryTextChange中显示文本长度的build议等于1:

 if(s.length() == 1){ searchText.showDropDown(); { 

设置一个OnQueryTextListener到你的SearchView。 利用它的onQueryTextChange来更新你的适配器。