【问题标题】:ViewPager and OnItemClickListener in ListViewListView 中的 ViewPager 和 OnItemClickListener
【发布时间】: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


【解决方案1】:

您是说您正在使每个列表项成为视图分页器,以便您可以实现滑动删除?如果是这样……不,不,这不是视图寻呼机的用途。首先抱歉,它只是不打算用作列表中的项目。其次是视图之间的切换,而不是滑动删除。

很遗憾,我们没有示例代码来展示如何执行此操作,但您可以查看平台对通知窗格或最近的应用程序的实现以获得一些想法。

【讨论】:

  • 我认识到这不是它的预期目的,因此没想到它会像它那样工作。除了选择器/OnItemClickListener 问题外,它运行良好。物理性能非常完美,即使在老化的 Nexus One 上使用复杂的布局(在 Galaxy Nexus 上也很棒),我也没有遇到任何性能问题。其中很大一部分是由于充分利用了视图回收器(包括在子视图中)并使用了 ViewHolder 模式。 (第 1/2 部分)
  • (续)也就是说,这更像是一个更普遍问题的具体实例:如何强制 ListView 显示/隐藏选择器?这在像这样的包装适配器中尤其重要,这些适配器可能具有可触摸的组件,但希望传递其子级的可聚焦性。 (第 2/2 部分)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多