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