Java 如何在ViewPager上后期调用invalidate()
我正在使用TouchDB复制一个DB,并在ViewPager中的一系列ListView中显示其内容。我遇到的问题是,在第一次复制时,TouchDB在复制完成之前调用它的onSuccess()/onPostExecute()方法,这意味着我不能在ViewPager上调用invalidate()来绘制ListViewJava 如何在ViewPager上后期调用invalidate(),java,android,touchdb,Java,Android,Touchdb,我正在使用TouchDB复制一个DB,并在ViewPager中的一系列ListView中显示其内容。我遇到的问题是,在第一次复制时,TouchDB在复制完成之前调用它的onSuccess()/onPostExecute()方法,这意味着我不能在ViewPager上调用invalidate()来绘制ListView 有什么解决办法吗?您可以添加一个runnable,它将在运行队列的末尾失效 myView.post(new Runnable() { @Override public void
有什么解决办法吗?您可以添加一个runnable,它将在运行队列的末尾失效
myView.post(new Runnable() {
@Override
public void run() {
myView.invalidate();
}
});
这有效吗?真正解决问题的唯一方法可能是定义一个侦听器接口,然后实例化并传递给DB代码。当DB代码实际完成时,它将回调到侦听器中。在该侦听器实例的实现中,您可以在视图上调用invalidate。啊,谢谢,我以为您的可运行代码解决了这个问题,但DB线程似乎仍然是最后一个完成的。我明白你对监听器接口的意思,但我不确定我是否会去管理它,因为我对这个接口下发生的事情了解得不够。我使用了你的代码的一个变体,让它在db线程之后运行invalidate。看起来这不是viewpager的问题,而是与db的viewquerys有关,我认为db线程最后完成,因为它运行很长时间。使用post()将线程排队运行,以便它们按顺序运行。但是它们也在UI线程上运行,所以您不希望像DB查询这样执行长时间运行的任务。