【问题标题】:SearchView: Getting the selected item from the suggestion listenerSearchView:从建议侦听器中获取所选项目
【发布时间】:2015-06-14 15:58:10
【问题描述】:
我有一个搜索视图,其中包含由 MatrixCursor 填充的建议(因为我已经有一个字符串数组)。但是我想知道用户正在选择哪个项目。到目前为止,我只能获得用户点击建议列表的位置:
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionClick(int position) {
String selectedItem = (String)mAdapter.getItem(position);
Log.e("search view", selectedItem);
return true;
}
但是我遇到了一个错误:android.database.MatrixCursor 不能被强制转换为 java.lang.String
我不知道如何解决它。非常感谢您的任何帮助。
【问题讨论】:
标签:
android
android-arrayadapter
simplecursoradapter
searchview
matrixcursor
【解决方案1】:
如果有人还在寻找答案。使用此代码。
searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
@Override
public boolean onSuggestionSelect(int position) {
return true;
}
@Override
public boolean onSuggestionClick(int position) {
Cursor cursor= searchView.getSuggestionsAdapter().getCursor();
cursor.moveToPosition(position);
String suggestion =cursor.getString(2);//2 is the index of col containing suggestion name.
searchView.setQuery(suggestion,true);//setting suggestion
return true;
}
});
【解决方案2】:
位置带来建议列表选中项的位置。如果您的建议列表是 Cursor(我可能认为是 Exception 是 MatrixCursor),则您必须获取位于光标位置的项目。
public boolean onSuggestionClick(int position) {
Cursor searchCursor = mySearchViewAdapter.getCursor();
if(searchCursor.moveToPosition(position)) {
String selectedItem = searchCursor.getString(columnOfTheItemStringInTheMatrix);
}
}
columnOfTheItemStringInTheMatrix 是您在创建矩阵并添加行时分配的列号。例如:
MatrixCursor c = new MatrixCursor("item"});
当您添加一行时(一个新项目到 MatrixCursor):
String item = "myItem";
c.addRow(new Object[]{item});
然后columnOfTheItemStringInTheMatrix = 0;