Вопрос по android, listview, search, android-widget – Android: предотвращение всплывающего текстового поля при вводе текста в SearchView

4

Привет разработчики Android,

У меня проблема с AndroidSearchView виджет. То, что я пытаюсь сделать, - это прикрепить «живой» текстовый фильтр для моего ListView (ввод текста автоматически обновляет результаты фильтра). Это работает на самом деле хорошо, и это не было огромным усилием, чтобы заставить его работать на моем ListActivity с этими строками:

<code>private SearchView listFilter;

this.listFilter = (SearchView) findViewById(R.id.listFilter);
this.listFilter.setOnQueryTextListener(this);
this.listFilter.setSubmitButtonEnabled(false);

this.getListView().setOnItemClickListener(this);
this.getListView().setTextFilterEnabled(true);

// from OnQueryTextListener
public boolean onQueryTextChange(String newText) {
    if (newText.isEmpty()) {
        this.getListView().clearTextFilter();
    } else {
        this.getListView().setFilterText(newText);
    }
    return true;
}
</code>

И здесь объявление xml виджета

<code><SearchView
    android:id="@+id/listFilter"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:iconifiedByDefault="false"
    android:queryHint="enter text to filter" />
</code>

Теперь моя проблема в том, что каждый раз, когда я ввожу текст в SearchView, появляется странное текстовое поле, мгновенно отображающее тот же текст, который я только что ввел. взгляд на мой список записей, который просто раздражает.

Есть ли способ предотвратить появление этого текстового поля при вводе в SearchView? Я не смог найти никакого свойства ни в опциях виджета, определенных в xml, ни в ссылках на класс java.

Я знаю, что есть еще один способ обеспечить функциональность фильтра с помощью EditText и TextWatcher, но тогда мне придется обрабатывать фильтрацию самостоятельно, и я не смогу получить выгоду от SearchView, обрабатывающего ее для меня.

Любые предложения приветствуются. С наилучшими пожеланиями

Феликс

Ваш Ответ

1   ответ
5

как избавиться от этого ужасного всплывающего окна. Хитрость заключается в том, чтобы работать с фильтром напрямую. В приведенном ниже коде предполагается, что вы реализовали фильтруемость в своем настраиваемом адаптере.

public boolean onQueryTextChange(String newText) {
    if (TextUtils.isEmpty(newText)) {
       m_listView.clearTextFilter();
    } else {
       ContactsAdapter ca = (ContactsAdapter)lv.getAdapter();
       ca.getFilter().filter(newText);
       //following line was causing the ugly popup window.
       //m_listView.setFilterText(newText);
    }
   return true;
}
Можете ли вы опубликовать свое решение для использования TextWatcher?
Благодаря своей работе, как шарм (Y)
Спасибо за ваш ответ. Я уже вернулся к обходному решению TextWatcher, но как только найду время, я протестирую это и дам зеленый флажок, если он работает. :) Felix

Похожие вопросы