Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AutoCompleteTextView使用合并光标显示来自SearchRecentSuggestionsProvider的不正确字符串_Android_Kotlin - Fatal编程技术网

Android AutoCompleteTextView使用合并光标显示来自SearchRecentSuggestionsProvider的不正确字符串

Android AutoCompleteTextView使用合并光标显示来自SearchRecentSuggestionsProvider的不正确字符串,android,kotlin,Android,Kotlin,我正在Android应用程序中实现一个自定义搜索屏幕,设置了一个AutoCompleteTextView,并将光标设置到我的SearchRecentSuggestionsProvider,以便在AutoCompleteTextView中显示这些建议 当光标仅指向SearchRecentSuggestionsProvider时,这可以正常工作,但是我想包括一些自定义建议,所以我设置了一个MergeCursor来实现这一点 当我这样做时,我的自定义建议将正确显示,但来自SearchRecentSug

我正在Android应用程序中实现一个自定义搜索屏幕,设置了一个AutoCompleteTextView,并将光标设置到我的SearchRecentSuggestionsProvider,以便在AutoCompleteTextView中显示这些建议

当光标仅指向SearchRecentSuggestionsProvider时,这可以正常工作,但是我想包括一些自定义建议,所以我设置了一个MergeCursor来实现这一点

当我这样做时,我的自定义建议将正确显示,但来自SearchRecentSuggestionsProvider的建议将显示为android。resource://system/17301578.

单击建议确实会将正确的文本添加到AutoCompleteTextView中,并且单步通过CursorToStringConverter确认这些文本已正确转换,但由于某些原因,这些文本在下拉列表中显示不正确

任何帮助都将不胜感激,因为我一直找不到有类似问题的人,甚至找不到许多其他人试图向SearchRecentSuggestionsProvider提供自定义建议的例子

以下是向AutoCompleteTextView添加建议的代码:

//获取指向SearchSuggestionsProvider的光标 瓦尔乌里= parsecontent://+SearchSuggestionProvider.AUTHORITY+/+SearchManager.SUGGEST\u Uri\u PATH\u查询 val projection=arrayOf\u id,SearchManager.SUGGEST\u COLUMN\u查询 val提示光标= this.context?.contentResolver?.queryuri,投影,null,arrayOf,null //为特殊建议设置自动完成 val specialSuggestions=mutableListOf 特别建议。添加诺福克岛 特别建议。添加皮特凯恩岛 //为新条目创建矩阵游标,并使用合并游标将其与最近的搜索一起返回 val matrixCursor=MatrixCursorprojection 对于我,建议在specialSuggestions.withIndex中{ matrixCursor.newRow .添加您的id,i .addSearchManager.SUGGEST\u列\u查询、建议 } //设置合并光标 val cursor=mergecursorarrayofmatricursor,suggestionCursor //设置光标的适配器 val适配器=SimpleCursorAdapter 在这种情况下, android.R.layout.simple\u list\u item\u 1, 光标, arrayOfSearchManager.SUGGEST\u COLUMN\u查询, intArrayOfandroid.R.id.text1, SearchManager.FLAG\u查询\u优化 //这可以确保游标中的行作为建议字符串返回 adapter.cursorToStringConverter=simplecursorsadapter.cursorToStringConverter{cur-> cur.getStringcur.getColumnIndexOrThrowSearchManager.SUGGEST\u COLUMN\u查询 } //这将根据用户键入的内容添加筛选 adapter.filterQueryProvider=filterQueryProvider{text-> val filterSuggestionCursor=this.context?.contentResolver?.query 乌里, 预测 无效的 arrayOftext.toString, 无效的 val FilterMatrix xCursor=矩阵xCursorProjection 对于i,specialSuggestions.filter{s->s.containstext,true}.withIndex中的建议{ filterMatrixCursor.newRow .添加您的id,i .addSearchManager.SUGGEST\u列\u查询、建议 } MergeCursorArrayOfficerMatrixCursor,filterSuggestionCursor } //将适配器添加到AutoCompleteTextView
val keywordsInput=view.findViewById

当您将合并光标与a MatrixCursor和SearchRecentSuggestionProvider一起使用时,似乎需要SearchRecentSuggestionProvider中的所有列,并且顺序相同

SearchRecentSuggestionsProvider的投影随后被应用,似乎我在想MergeCursor会将投影与我的MatrixCursor合并

为了解决这个问题,我将MatrixCursor构造函数更改为:

val FilterMatrix xCursor=MatrixCursorfilterSuggestionCursor?.columnNames
经过一点挖掘,安卓系统似乎已经过时了。resource://system/17301578 参考com.android.internal.R.drawable.ic_菜单_最近的_历史记录,它位于SearchManager.SUGGEST_列_图标_1列中。我的投影不包含此列,所以我不确定它是如何到达的?