【发布时间】:2011-11-17 09:01:39
【问题描述】:
我正在创建一个滑动关闭列表视图适配器。我的基本方法是将列表项的视图包装为 ViewPager 中的第二个视图,并在 ViewPager 的项目更改侦听器中提供必要的回调。经过很多痛苦,我让 View 回收器按预期工作,并实现了 ViewHolder 和 ViewBinder 模式。我什至设法在 ViewPager 滚动时阻止 ListView 接管触摸事件,而不必创建 ListView 的自定义子类(我可以从适配器中完成这一切)。
我遇到麻烦的地方是让选择器和OnItemClickListener 工作。在查看 ListView 的源代码后,似乎通过覆盖 ViewPager 的 hasFocusable() 方法以始终返回 false(稍后我将从子视图中提取此值),这些东西应该已经被重新启用。不幸的是,这种情况并非如此。我已经尝试了setDecendantFocusability() 解决方法,但我仍然卡住了。
如果可能的话,我想避免扩展 ListView 以提供最大程度的模块化。出于类似的原因,我不想将选择器添加到 ViewPager 的背景中(如果开发人员更改了 ListView 的选择器,则不会反映出来)。本质上,我希望使 ListView 和子视图之间的 ViewPager 代码透明。有什么想法吗?
【问题讨论】:
-
应该注意我并不反对“欺骗” ListView 认为 ViewPager 不可点击。这基本上就是我试图用 hasFocusable() 方法做的事情。
-
我从旧版 AOSP 音乐应用程序中提取的
TouchListView提供了将项目拖到一边以将其删除的功能。与尝试破解ViewPager来担任此角色相比,从此类开始将是一个更好的选择。
标签: android listadapter android-viewpager