События кликов из представлений внутри элементов MergeAdapter запускаются только после прокрутки
В настоящее время я использую cwac-merge в своем приложении и столкнулся с проблемой.
Так что у меня есть этот список с различными частями. Первые или статические представления добавлены в MergeAdapter. Они добавляются напрямую без их активации или деактивации.
Затем я добавляю другие адаптеры к моему MergeAdapter
и прячет их сразу с setActive()
, Они заполняются асинхронно, но добавляются до listView.setAdapter(adapter)
, Итак, я делаю это для каждого адаптера:
- добавить адаптер в
MergeAdapter
сadapter.addAdapter(subAdapter)
- скрыть это с
adapter.setActive(subAdapter, false)
- когда данные извлекаются, добавьте полученные элементы в подадаптер,
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