Как правильно фильтровать текст в ListView? - PullRequest
6 голосов
/ 05 октября 2010

Я пытался отфильтровать свой ListView из своего окна EditText, но в настоящее время он не работает.

У меня есть ListView, который правильно получает данные, и они добавляются в мой собственный ListView с использованием класса ArrayAdapter имой собственный класс ArrayList.Когда я, например, набираю «таблица», я хочу, чтобы он сортировал по загруженным заголовкам в моем ListView, а затем он должен показать мне элементы, которые остались и соответствуют таблице.

Мой текущий код:

private ArrayList<Order> orders; /* ArrayList class with my own Order class to 
define title, info etc. */
private OrderAdapter adapter; //Own class that extends ArrayAdapter

orders = new ArrayList<Order>();
adapter = new OrderAdapter(this, R.layout.listrow, orders); /* listrow defining a
single item in my ListView */
setListAdapter(adapter); //Set our adapter to a ListView

search.addTextChangedListener(filterTextWatcher); //search is my EditText

private TextWatcher filterTextWatcher = new TextWatcher() {

    public void afterTextChanged(Editable s) {

    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        adapter.getFilter().filter(s); //Filter from my adapter
        adapter.notifyDataSetChanged(); //Update my view
    }

};

Хорошо, как я могу этого добиться?Когда я вводю какое-то значение в поле EditText, все исчезает, даже если есть совпадение.

Заранее спасибо и скажите мне, если вам нужно больше фрагментов кода или этот вопрос мне неясен!

1 Ответ

6 голосов
/ 05 октября 2010

Встроенный фильтр, реализованный ArrayAdapter, преобразует содержащийся объект в строку, вызывая метод toString (). Именно эта строка будет использоваться для сопоставления. Если вы пытаетесь сопоставить только одно строковое поле в вашем объекте Order, вы можете переопределить метод toString () для вашего класса Order, чтобы вернуть это поле. Если вы хотите выполнить более гибкое сопоставление, например сопоставление нескольких полей, ознакомьтесь с этим сообщением, в котором показано, как создать настраиваемый фильтр:

Пользовательская фильтрация в Android с использованием ArrayAdapter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...