1

我正在使用 AndroidAnnotations 2.7.1,并且在我的整个应用程序中都成功使用了它。然而,我最近偶然发现了一些与适配器和使用 @EViewGroup 的自定义视图相关的问题。遵循食谱中描述的食谱

我有两个不同的适配器和两个不同的自定义视图。

在这两个适配器中,ListView 行中的错误 ImageView 会使用库 Android Universal Image Loader 加载的图像进行更新。在一个适配器中,只需单击一个即可检查多个复选框。

ShowViewShowsAdapter <-- ListView 行中更新了错误的 ImageView 和 Checkbox

ShowScheduleViewScheduleAdapter <-- ListView 行中的 ImageView 错误

我知道 getView() 被多次调用以确定每一行的高度。

还尝试在 UIL 选项中使用 ViewHolders 和 .resetViewBeforeLoading() 但无济于事。

什么可能导致这种行为?

先感谢您!

4

1 回答 1

2

由于视图被适配器回收,您可能会保留该视图先前显示的旧状态。

检查您如何将数据绑定到自定义视图,请记住,如果未重置所有先前绑定的数据,则可以保留它们。

例如,自定义视图中的以下数据绑定方法可能会导致相同的问题:

public void bind(Data data) {
   if (data.foo) {
      textView.setColor(Color.WHITE);
   }
   (...)
}

如果视图被回收并且之前data.foo为真,如果现在data.foo为假,则 textView 将保持其颜色为白色。正确的方法是这样的:

public void bind(Data data) {
   if (data.foo) {
      textView.setColor(Color.WHITE);
   } else {
      textView.setColor(<inital color>);
   }
   (...)
}
于 2013-07-22T17:47:03.963 回答