嗨所以我有一个CursorAdapter,它映射到数据库中的某些项目,看起来像这样
游戏ID |类型| picurl | currPlayer |创造者
gameid是每个游戏的唯一ID,我有2种类型。玩家游戏和机器人游戏。如果游戏是机器人游戏,那么picurl / currPlayer / creator将为null。这是我的适配器代码。
这是我的代码:http://pastebin.com/61KZbir1
我遇到的问题是,在初始加载时,有时几张图像不会显示,但是当我滚动它们时。除此之外,机器人游戏有时会显示错误的文本和图像,但是当我滚动时它们会自行修复。我解决这个问题的一件事就是当我将所有数据插入到表中时,我正在取消注册更新ui的内容观察者并在我完成插入后重新注册它然后调用该方法一次以更新ui。该方法位于pastebin的底部,名为refreshGamesList()。但是当我没有取消注册删除/插入的内容观察者时,视图首先显示不正确,但随后它获得了更多的回调并且它自己修复了这些回调。我到处寻找解决方案但没找到任何东西。
答案 0 :(得分:3)
我终于修好了!问题主要是从我的bindview中解决任务是糟糕的设计我认为,我将我正在做的所有查询从bindview中的asynctask转移到ui线程(活动)中的asynctask,然后我使用了矩阵并构造了一个自定义光标与我需要的数据来自另一个表。我将矩阵光标传递给我的适配器并改变了我的lazyloader直接操作imageview我传递给它只是让它调用adapter.notiftdatasetchanged(),它工作得更好。基本上我重写了很多代码,因为我的预感是它从bindview中解放了很多asynctasks,这搞砸了所有内容所以我把它移动到了ui线程,它只会被调用一次并且正确。我认为游标适配器中涉及的GC有时会以奇怪的方式调用newview / bindview,因此每次调用bindview时触发asynctask都会导致视图不一致。