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;

Другие вопросы по тегам