0

我目前在我的应用程序中使用cwac-merge并且遇到了问题。

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

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

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

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

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

更新:我已经设法(在某种程度上)通过在激活它们之后调用 subAdapter.notifyDatasetChanged() 来修复它。它仍然很笨拙,并且并非每次都有效。

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

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

榜首 列表底部

4

1 回答 1

0

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

总之,好时光!谢谢@CommonsWare

于 2013-07-04T14:29:57.567 回答