【问题标题】:SearchView suggestions adapter is not popping up in AndroidSearchView 建议适配器未在 Android 中弹出
【发布时间】:2019-09-24 20:32:52
【问题描述】:

我有一个这样的搜索菜单项

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
            android:id="@+id/action_search"
            android:icon="@drawable/search_icon"
            android:title="Search"
            app:actionViewClass="android.widget.SearchView"
            app:showAsAction="always|collapseActionView"/>

</menu>

我正在夸大它,然后像这样为 SearchView 设置侦听器

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.search_menu_item, menu)
        return true
    }

    override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
        val mSearchMenuItem = menu?.findItem(R.id.action_search)


        mSearchMenuItem?.setOnActionExpandListener(object : MenuItem.OnActionExpandListener{
            override fun onMenuItemActionExpand(p0: MenuItem?): Boolean {
                return true
            }

            override fun onMenuItemActionCollapse(p0: MenuItem?): Boolean {
                return true
            }

        })

        searchView = mSearchMenuItem?.actionView as SearchView

        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String): Boolean {
                samSearchViewModel.searchData(query)

                return false
            }

            override fun onQueryTextChange(newText: String): Boolean {
                if (newText.length >= 3) {
                    samSearchViewModel.searchData(newText)
                }
                return false
            }
        })

        searchView.setOnCloseListener(object : SearchView.OnCloseListener {
            override fun onClose(): Boolean {
                return false
            }
        })  

        return true
    }

然后我在从服务器取回数据后尝试使用这样的 SimpleCursorAdapter 显示它。

val strArr: Array<String?> = arrayOfNulls(t.datas?.size!!)
                        for(i in t.datas!!.indices){
                            strArr[i] = t.datas!![i]?.symbol
                        }

                        val searchManager = getSystemService(SEARCH_SERVICE) as SearchManager
                        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()))
                        val to = intArrayOf(android.R.id.text1)
                        searchView.setIconifiedByDefault(false)
                        searchView.setSuggestionsAdapter(SimpleCursorAdapter(this@MainActivity,android.R.layout.simple_list_item_1,null,strArr,to,CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER))

所以发生的事情是,我可以展开 SearchView,输入它,然后我也从服务器获取数据,但是搜索建议列表没有弹出。它只是空白。 我错过了什么?任何帮助,将不胜感激。谢谢

【问题讨论】:

  • 您想在哪里显示建议?在像 AutoCompleteTextView 一样的搜索视图中??
  • 是的,就在工具栏的下方

标签: android kotlin searchview simplecursoradapter


【解决方案1】:

您可能需要设置Threshold

AutoCompleteTextView searchAutoCompleteTextView = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchAutoCompleteTextView.setThreshold(3);

如果您将阈值设置为 3,这意味着它将在输入第一个字符后开始提供建议

【讨论】:

  • 我试图在第三个字符之后得到建议。
  • 然后使用searchAutoCompleteTextView.setThreshold(3);
  • 我的意思是,我已经这样做了,我只在第三个字符之后才调用 api,即使我尝试了这个解决方案,但它没有用。
  • 我的问题只是适配器没有显示搜索结果。
  • 如果不设置阈值,它将不会显示建议。一个建议,将你的建议记录在logcat中,看看结果是否出现
猜你喜欢
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多