2011-12-29 28 views
4

我已经将SearchView添加到我的应用程序的ActionBar中,并使用SearchableInfo设置了一个SuggestionsProvider。除非在搜索查询文本为空时不显示任何建议,否则建议实际上运行良好。我发现,即使searchSuggestThreshold设置为0,我的建议提供者也不会被查询建议。Android Honeycomb - 如何查询文本为空时显示SearchView的建议?

最接近的解决方案是使用setOnQueryTextFocusChangeListener并在onFocusChange中交换SearchView建议适配器的光标。通过这种方式,我可以看到正确高度的建议,但没有显示任何建议文字。

以下是我如何查询光标以显示空文本的建议。

Cursor emptySuggestions = getContentResolver().query(
          Uri.parse("content://my.authority/search_suggest_query/test"), 
          null, null, null, null); 

有什么方法可以使建议正确显示吗?

当然,当搜索查询为空时,总有可能显示我自己的ListPopupWindow,但我想避免这种情况,除非有一种简单的方法来重用SearchView中使用的布局。

回答

2

我想出如何触发搜索视图来查询我的建议提供了空搜索文本:

_searchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() 
     { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) 
      { 
      if (!hasFocus) 
       return; 

      String query = _searchView.getQuery().toString(); 
      _searchView.setQuery(query, false); 
      } 
     }); 
+0

嗨,你能解释为什么这个工程?为什么它不适用于searchView.setQuery(query,false)行? – benzabill 2014-07-03 17:00:55

+0

@benzabill其实我不记得细节,并重新编写代码,不再需要它。我想我的SuggestionsProvider中有一个错误。 – 2014-07-03 17:18:37

+0

使用此解决方案建议出现在键盘后面。我在“view.post(new Runnable(){”)中封装了代码,仍然没有用。如果searchview已经准备好显示建议,那么必须有一个处理程序来处理。 – 2014-08-06 09:26:35

1

除了手动触发onQueryTextChange()方法之上,SearchView.SearchAutoComplete门槛需要设置为零

SearchView.SearchAutoComplete sac = (SearchView.SearchAutoComplete) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); 
if (sac != null) { 
    sac.setThreshold(0); 
} 
+0

即使这种方法受限制,但它的工作原理! – 2018-02-27 13:58:47

相关问题