【发布时间】:2013-07-04 10:04:36
【问题描述】:
我目前在我的应用中使用cwac-merge,但遇到了问题。
所以我有这个包含不同部分的列表视图。添加到 MergeAdapter 的第一个或静态视图。它们是直接添加的,无需激活/停用它们。
然后我将其他适配器添加到我的MergeAdapter 并立即使用setActive() 隐藏它们。这些是异步填充的,但在listView.setAdapter(adapter) 之前添加。所以我对每个适配器都这样做:
- 将适配器添加到
MergeAdapter和adapter.addAdapter(subAdapter) - 用
adapter.setActive(subAdapter, false)隐藏它 - 获取数据时,将检索到的项目添加到子适配器
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() 部分来解决它。我会及时通知你的。非常感谢您的宝贵时间!