Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

SearchView.Suggestions не работает, если введен только 1 символ

#java #android


Использую android.support.v7.widget.SearchView. Сделал автоподстановку значений.
Почему-то подстановка не работает, список автоподстановки просто не появляется если
пользователь ввел только один символ. Я так понимаю, должно быть какое-то свойство
типа SetThreshold, но не могу его найти.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();
    searchView.setOnQueryTextListener(this);
    searchView.setOnSuggestionListener(this);
    MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.action_search), expandListener);
    return true;
}

@Override
public boolean onQueryTextSubmit(String query) {
    return true;
}

@Override
public boolean onQueryTextChange(String newText) {
    if (newText.length() == 0)
        return false;
    Cursor cursor = DB.getInstance(this).getSuggestions(newText);
    if (cursor.getCount() > 0) {
        String[] columns = new String[] { "_id", "type", "source" };
        int[] columnTextId = new int[] { R.id.ivTypeIcon, R.id.tvType, R.id.tvSearchResult };
        searchAutoComplete = new SuggestionSimpleCursorAdapter(getBaseContext(),
                R.layout.search_result_item, cursor,
                columns, columnTextId,
                CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        searchView.setSuggestionsAdapter(searchAutoComplete);
        return true;
    } else {
        searchView.setSuggestionsAdapter(null);
        cursor.close();
    }
    return false;
}

@Override
public boolean onSuggestionSelect(int position) {
    return false;
}


public class SuggestionSimpleCursorAdapter extends SimpleCursorAdapter
{
    Context context;
    int layout;

    public SuggestionSimpleCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);
        this.context = context;
        this.layout = layout;
    }

    @Override
    public int getCount() {
        return super.getCount();
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(this.context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(this.layout, parent, false);
        return view;
    }

    @Override
    public void bindView(View view, Context _context, Cursor _cursor) {
        // my code  
    }
}


Обновление

После отладки удалось выяснить, что в адаптере не вызываются методы getCount, newView,
bindView по сути выполняется только конструктор. Хотя все данные валидны, в курсоре
данные есть.
    


Ответы

Ответ 1



Собственно решил проблему В searchable.xml обязательны теги label и hint после этого конфигурируем SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchableInfo searchableInfo = searchManager.getSearchableInfo(getComponentName()); searchView.setSearchableInfo(searchableInfo);

Комментариев нет:

Отправить комментарий