【问题标题】:Click events from views inside MergeAdapter items only fired after scrolling仅在滚动后触发 MergeAdapter 项内视图的单击事件
【发布时间】:2013-07-04 10:04:36
【问题描述】:

我目前在我的应用中使用cwac-merge,但遇到了问题。

所以我有这个包含不同部分的列表视图。添加到 MergeAdapter 的第一个或静态视图。它们是直接添加的,无需激活/停用它们。

然后我将其他适配器添加到我的MergeAdapter 并立即使用setActive() 隐藏它们。这些是异步填充的,但在listView.setAdapter(adapter) 之前添加。所以我对每个适配器都这样做:

  1. 将适配器添加到MergeAdapteradapter.addAdapter(subAdapter)
  2. adapter.setActive(subAdapter, false)隐藏它
  3. 获取数据时,将检索到的项目添加到子适配器subAdapter.addItems(items),然后显示适配器adapter.setActive(subAdapter, true)

一切都运行良好,我的观点看起来不错,除了一件事。我在MergeAdapter 的顶部视图中有几个按钮。点击行为是错误的。有时单击事件仅在滚动ListView 后才会触发。我注意到只有在我使用 setActive() 函数时才会发生这种情况。如果我对每个setActive() 电话都发表评论,则无法重现该问题。 如果我点击多次然后滚动,就会触发多次点击。

这里是一些截图。静态视图是图像和带有 4 个按钮的视图。然后动态部分是之后的适配器(传记,最后播放和最佳曲目)

更新: 我已经设法(在某种程度上)通过在激活它们中的每一个后调用 subAdapter.notifyDatasetChanged() 来修复它。它仍然很老套,而且不是每次都有效。

更新: 我认为这应该由图书馆涵盖,因为:

但请注意,您可以修改底层适配器。因此对于 例如,如果您将 CursorAdapter 添加到 MergeAdapter,并且您 requery() 光标,更改应通过 MergeAdapter 到 MergeAdapter 连接到的任何 AdapterView。

【问题讨论】:

  • 创建一个重现问题的示例项目,然后 file an issue 提供该演示代码(以及重现条件的步骤),以便我可以研究您的问题。
  • 好的,我会尽力做到的,谢谢!
  • 该死的我无法在样本中重现它-.-
  • 很有可能问题在于您使用原始代码所做的事情,而不是MergeAdapter 本身。这也是我要求提供可重现样本的部分原因——如果无法重现它,并没有祈祷这样做。
  • 我完全同意。我只是认为它与 MergeAdapter 有关,因为我可以通过评论 setActive() 部分来解决它。我会及时通知你的。非常感谢您的宝贵时间!

标签: android commonsware-cwac


【解决方案1】:

这个问题实际上是我的项目所特有的。在获取和填充内容时,我在隐藏内容上显示了一个包含 ProgressBar 的屏幕。我显示内容的那一刻和检索数据的那一刻发生了冲突。从技术上讲,屏幕视图上的setVisibility(VISIBLE) 是在使用mergeadapter.setActive() 命令时出现的。

无论如何,美好的时光!谢谢@CommonsWare

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 2023-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多