2013-04-04 91 views
4

我正在使用TouchDB复制数据库并在ViewPager中的一系列ListView中显示其内容。我遇到的问题是,在第一次复制时,TouchDB在完成复制之前将其称为onSuccess()/ onPostExecute()方法,这意味着我无法在ViewPager上调用invalidate()以使其绘制ListView。如何在ViewPager上稍后调用invalidate()

有没有解决这个问题的方法?

回答

3

您可以添加一个无效的runnable到运行队列的末尾。

myView.post(new Runnable() { 
    @Override 
    public void run() { 
    myView.invalidate(); 
    } 
}); 

这是行吗?

+0

真正解决您的问题的唯一方法可能是定义您实例化并传递给您的DB代码的侦听器接口。当DB代码实际完成时,它将回调到监听器中。在该侦听器实例的实现中,您可以在视图上调用invalidate。 – 2013-04-04 19:53:32

+0

啊谢谢,我认为你的Runnable代码解决了它,但似乎数据库线程仍然在最后完成。我明白你对监听器接口的意思,但不知道我将如何管理,因为我对引擎盖下面发生的事情不够了解 – KingFu 2013-04-04 20:06:08

+0

使用了你的代码的变体,并让它在数据库线程。看起来这不是问题,但viewpager与db的viewquerys有关我认为 – KingFu 2013-04-04 20:16:48