SearchView: получение выбранного элемента из прослушивателя предложений
У меня есть представление поиска, в котором есть предложения, заполненные 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, и я не уверен, как обойти это. Действительно ценю за любую помощь.
2 ответа
Если кто-то все еще ищет ответ. Используйте этот код.
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;
}
});
Позиция приносит предложенный список выбранной позиции позиции. Если ваш предложенный список является 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
;