Фильтрация ListView, которая является частью фрагмента ViewPager

Недавно я преобразовал свое приложение с использования Activites и TabHost на использование фрагментов и ViewPager из библиотеки совместимости Android для API v4. Мне удалось исправить/разрешить большинство проблем, но я не могу сохранить предыдущее поведение с фильтрацией текста в ListViews с помощью ="http://developer.android.com/reference/android/widget/AbsListView.html#setTextFilterEnabled%28boolean%29" rel="nofollow">setTextFilterEnabled.

Мой ViewPagerAdapter содержит фрагменты, каждый из которых имеет ListView. Когда пользователи пролистывают ViewPager, я хотел бы, чтобы текущий активный элемент ListView Fragment фильтровал текст по мере ввода пользователем, как я смог сделать с моделью TabHost-Activity. В настоящее время похоже, что ListView первого фрагмента будет реагировать правильно, но если я перейду к следующему фрагменту и попытаюсь отфильтровать его ListView, фильтрация все равно будет применяться к первому. Если я проведу мимо первых двух, а затем отфильтрую, результаты будут недетерминированными. Текущий активный фрагмент никогда не применит фильтр. Иногда соседний фрагмент будет, иногда нет.

Я попытался исправить это, добавив пользовательские обратные вызовы, которые позволяют мне отслеживать, какой фрагмент в настоящее время виден, а какой скрыт. Когда фрагмент становится видимым как основной фрагмент ViewPager, я устанавливаю setTextFilterEnabled в его ListView на true, а все остальные устанавливаю на false. Похоже, это совсем не помогло (я убедился, что правильно переключаю флаг для правильных фрагментов).

Я подозреваю, что для этого нужна более глубокая интеграция с ViewPager, но я не могу понять, что мне нужно подключить. Любые идеи о том, как я могу сделать эту работу? Я с удовольствием покопаюсь с кодом ACL, если это необходимо.


person psychotik    schedule 28.09.2011    source источник
comment
было бы полезно, если бы вы могли опубликовать соответствующие фрагменты того, что вы делали раньше и что вы делаете сейчас.   -  person Rafael T    schedule 23.01.2012


Ответы (1)


Вы можете реализовать метод onPageSelected расширение OnPageChangeListener. Возможно, вы уже делаете это. Оттуда вы можете установить адаптер на текущий ListView или запросить ваш cursorAdapter, если это так. Обратите внимание, что используемый адаптер должен реализовывать фильтруемый интерфейс.

person JuanMa Cuevas    schedule 24.01.2012