События кликов из представлений внутри элементов MergeAdapter запускаются только после прокрутки

В настоящее время я использую cwac-merge в своем приложении и столкнулся с проблемой.

Так что у меня есть этот список с различными частями. Первые или статические представления добавлены в MergeAdapter. Они добавляются напрямую без их активации или деактивации.

Затем я добавляю другие адаптеры к моему MergeAdapter и прячет их сразу с setActive(), Они заполняются асинхронно, но добавляются до listView.setAdapter(adapter), Итак, я делаю это для каждого адаптера:

  1. добавить адаптер в MergeAdapter с adapter.addAdapter(subAdapter)
  2. скрыть это с adapter.setActive(subAdapter, false)
  3. когда данные извлекаются, добавьте полученные элементы в подадаптер, subAdapter.addItems(items) а затем показать адаптер с adapter.setActive(subAdapter, true)

Все работает отлично, и мой взгляд выглядит хорошо, за исключением одного. У меня есть несколько кнопок на вид сверху с MergeAdapter, Поведение щелчка неверно. Иногда события щелчка запускаются только после прокрутки ListView, Я заметил, что это произойдет, только если я буду играть с setActive() функция. Если я прокомментирую каждый setActive() звонки, проблема не может быть воспроизведена. Если я нажимаю несколько раз, прокручиваю, так много щелчков.

Вот несколько скриншотов. Статические виды - это изображение и вид с помощью 4 кнопок. Затем динамическая часть - это адаптеры после (биография, последний сыгранный и лучшие треки)

ОБНОВЛЕНИЕ: мне удалось (вроде) исправить это, вызвав subAdapter.notifyDatasetChanged() после активации каждого из них. Он все еще хакерский и не работает каждый раз.

ОБНОВЛЕНИЕ: Я думаю, что это должно быть покрыто библиотекой, учитывая что:

Обратите внимание, что вы можете изменить базовые адаптеры. Так, например, если вы добавляете CursorAdapter в MergeAdapter и запрашиваете () Cursor, изменения должны отражаться через MergeAdapter для любого AdapterView, к которому подключен MergeAdapter.

верхняя часть списканижняя часть списка

1 ответ

Решение

На самом деле проблема была связана с моим проектом. Пока содержимое загружалось и заполнялось, я показывал экран с ProgressBar поверх скрытого содержимого. Момент, когда я показывал контент и тот, когда данные были получены, сталкивались. Технически, setVisibility(VISIBLE) на экране происходило в плохое время с mergeadapter.setActive() команда.

Во всяком случае, хорошие времена! Спасибо @CommonsWare

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