ViewPager и OnItemClickListener в ListView

Я работаю над созданием адаптера представления списка, позволяющего смахнуть пальцем. Моя основная методология заключается в том, чтобы обернуть представление элемента списка как второе представление в ViewPager и предоставить необходимые обратные вызовы в прослушивателе изменения элемента ViewPager. С большим трудом я добился того, что переработчик View работает, как задумано, а также реализованы шаблоны ViewHolder и ViewBinder. Мне даже удалось удержать ListView от принятия сенсорных событий во время прокрутки ViewPager без необходимости создавать собственный подкласс ListView (я могу сделать все это из адаптера).

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

Я хотел бы избежать расширения ListView, если это возможно, чтобы обеспечить максимальную модульность. По тем же причинам я не хочу добавлять селектор на фон ViewPager (если разработчик изменит селектор ListView, это не будет отражено). По сути, я хочу сделать код ViewPager прозрачным между ListView и дочерним представлением. Есть идеи?


person keyboardr    schedule 17.11.2011    source источник
comment
Следует отметить, что я не против того, чтобы обмануть ListView, заставив его думать, что ViewPager не кликабельный. По сути, это то, что я пытался сделать с помощью метода hasFocusable().   -  person keyboardr    schedule 17.11.2011
comment
TouchListView, который я извлек из старой версии приложения AOSP Music, предлагает возможность перетаскивания элементов в сторону, чтобы удалить их. Начать с чего-то подобного будет лучше, чем пытаться взломать ViewPager для этой роли.   -  person CommonsWare    schedule 18.12.2011


Ответы (1)


Вы говорите, что делаете каждый элемент списка пейджером просмотра, чтобы вы могли реализовать пролистывание для удаления? Если да... нет-нет, просмотр пейджера не для этого. Во-первых, извините, он просто не предназначен для использования в качестве элемента списка. Во-вторых, для переключения между представлениями, а не для удаления.

К сожалению, у нас нет примера кода, чтобы показать, как это сделать, но вы можете посмотреть на реализацию платформы панели уведомлений или последних приложений, чтобы получить некоторые идеи.

person hackbod    schedule 17.12.2011
comment
Я понимаю, что это не было его предполагаемой целью, и в этом отношении не ожидал, что он будет работать так хорошо, как работал. За исключением проблемы с селектором/OnItemClickListener, он работает прекрасно. Физика идеальна, и я не сталкиваюсь с какими-либо проблемами производительности даже со сложными макетами на устаревшем Nexus One (и на Galaxy Nexus это просто фантастика). Большая часть этого связана с хорошим использованием рециклера представления (в том числе в дочернем представлении) и использованием шаблона ViewHolder. (часть 1/2) - person keyboardr; 19.12.2011
comment
(продолжение) Тем не менее, это скорее частный случай более общего вопроса: как заставить ListView показывать/скрывать селектор? Это особенно важно в адаптерах-оболочках, подобных этому, которые могут иметь сенсорные компоненты, но хотят передать фокусируемость своим дочерним элементам. (часть 2/2) - person keyboardr; 19.12.2011