ViewPager和ListView中的OnItemClickListener

7
我正在创建一个滑动删除列表视图适配器。 我的基本方法是将列表项的视图包装为ViewPager中的第二个视图,并在ViewPager的项目更改监听器中提供必要的回调。 经过很多痛苦,我已经让视图回收工作正常,同时实现了ViewHolder和ViewBinder模式。 我甚至设法使ListView在ViewPager被滚动时不占用触摸事件,而无需创建自定义子类(我可以从Adapter中完成所有操作)。
我遇到的问题是选择器和OnItemClickListener无法正常工作。 查看ListView的源代码后,似乎通过覆盖ViewPager的hasFocusable()方法始终返回false(稍后我将从子视图中获取此值),应该重新启用这些内容。 不幸的是,情况并非如此。 我尝试了setDecendantFocusability()解决方法,但仍然卡住了。
如果可能的话,我想避免扩展ListView,以提供最大程度的可重用性。 出于类似的原因,我不想将选择器添加到ViewPager的背景中(如果开发人员更改ListView的选择器,则不会反映这一点)。 本质上,我希望在ListView和子View之间使ViewPager代码透明化。 有任何想法吗?

需要注意的是,我并不反对“欺骗”ListView,让它认为ViewPager是不可点击的。这本质上就是我尝试使用hasFocusable()方法实现的。 - keyboardr
1
我从旧版 AOSP 音乐应用中提取的 TouchListView 提供了将项目拖到一侧以移除它们的功能。 从这样的东西开始比尝试对 ViewPager 进行修改更好。 - CommonsWare
1个回答

7
你说你将每个列表项变成一个视图页面,这样就可以实现滑动删除?如果是这样的话...不不,这不是视图页面的用法。首先很抱歉,它并不是用于作为列表项的,其次它是用于在视图之间进行切换,而不是滑动删除。
很遗憾我们没有示例代码来展示如何实现这一点,但是你可以查看平台的通知窗格或最近使用的应用程序的实现以获取一些想法。

我认识到这不是它的预期目的,而且事实上也没有预料到它会像现在这样好用。除了选择器/OnItemClickListener问题之外,它运行得非常完美。物理效果很好,即使在老旧的Nexus One上使用复杂布局也没有性能问题(在Galaxy Nexus上表现出色)。其中很大一部分原因是充分利用了视图回收器(包括子视图内部)并使用了ViewHolder模式。(第1/2部分) - keyboardr
话虽如此,这只是一个更一般的问题的特定实例:如何强制ListView显示/隐藏选择器? 这在包装适配器中尤其重要,例如可能具有可触摸组件但希望将其子项的焦点传递给上层。 (第2/2部分) - keyboardr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接