gpt4 book ai didi

android - SearchView 提示未显示输入的单个字符

转载 作者:IT老高 更新时间:2023-10-28 23:07:16 28 4
gpt4 key购买 nike

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

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

我遇到的问题是输入 single 字符时不会显示搜索提示。在搜索框中键入两个或更多字符效果很好。

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

我是否在 SearchView 的配置/初始化中遗漏了什么?喜欢我可以设置的 android:searchSuggestThreshold 以外的选项吗?过去几个小时我一直在寻找替代方案,但找不到任何替代方案。

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

有没有人知道一个优雅的解决方案?

谢谢!

检测搜索词变化:

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

菜单 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
//...
}

可搜索的配置:

<?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=" ?"/>

最佳答案

您必须获取 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);

关于android - SearchView 提示未显示输入的单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229412/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com