单击仅在滚动后触发的MergeAdapter项目内的视图中的事件

时间:2013-07-04 10:04:36

标签: android commonsware-cwac

我目前在我的应用中使用cwac-merge而我正面临一个问题。

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

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

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

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

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

    更新: 我已经设法(通过在激活它们之后调用subAdapter.notifyDatasetChanged()来修复它。它仍然是hacky,每次都不起作用。

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

      

    但请注意,您可以修改基础适配器。因此对于   例如,如果您向MergeAdapter添加CursorAdapter,那么   requery()的Cursor,应该通过改变来反映   将MergeAdapter合并到MergeAdapter所连接的任何AdapterView。

    top of the list bottom of the list

1 个答案:

答案 0 :(得分:0)

问题实际上与我的项目有关。当内容被提取和填充时,我正在显示一个屏幕,其中包含隐藏内容的ProgressBar。我显示内容的时刻和检索数据时的内容发生冲突。从技术上讲,屏幕视图上的setVisibility(VISIBLE)使用mergeadapter.setActive()命令在错误的时间发生。

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