SearchView提示不显示单个字符类型

时间:2016-02-05 16:51:30

标签: android autocomplete searchview

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

在应用中,我需要为SearchView启用搜索建议。因此,每次检测到查询更改时,都会检查是否需要更新建议(下面的代码)。如果需要更新建议,则会对后端进行调用,并创建包含搜索建议的android.database.MatrixCursor,并在SearchView的建议适配器(下面的代码)上设置。

我遇到的问题是,在输入单个字符时,搜索提示不会显示。在搜索框中键入两个或多个字符可以很好地工作。

我尝试在我的XML配置中将android:searchSuggestThreshold设置为01并得到相同的结果(例如忽略该选项):搜索提示显示多个输入字符,但不显示单个字符。

我在SearchView的配置/初始化中遗漏了什么?像我可以设置的android:searchSuggestThreshold以外的选项一样?我花了最后几个小时寻找其他选择但却找不到。

我看到的一个可能的解决方案是让AutoCompleteTextView支持SearchView的输入并将其阈值设置为1,但这是一个丑陋的(hack-ish)解决方案{ {1}} API未公开{1}}。

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

谢谢!

检测搜索字词更改:

AutoCompleteTextView

更新搜索建议:

SearchView

菜单SearchView初始化:

//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
}

可搜索的配置:

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()
  })
}

3 个答案:

答案 0 :(得分:2)

您必须处理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);

答案 1 :(得分:0)

我在这里看到你关于“优雅解决方案”的观点非常好但是我担心如果你想实现你的目标,Android API会强迫你多次做“不优雅”:)

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

获取EditText的实例:

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

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

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

答案 2 :(得分:0)

在SearchView上设置OnQueryTextListener。利用其onQueryTextChange更新适配器。