Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ViewPager上后期调用invalidate()_Java_Android_Touchdb - Fatal编程技术网

Java 如何在ViewPager上后期调用invalidate()

Java 如何在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

我正在使用TouchDB复制一个DB,并在ViewPager中的一系列ListView中显示其内容。我遇到的问题是,在第一次复制时,TouchDB在复制完成之前调用它的onSuccess()/onPostExecute()方法,这意味着我不能在ViewPager上调用invalidate()来绘制ListView


有什么解决办法吗?

您可以添加一个runnable,它将在运行队列的末尾失效

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

这有效吗?

真正解决问题的唯一方法可能是定义一个侦听器接口,然后实例化并传递给DB代码。当DB代码实际完成时,它将回调到侦听器中。在该侦听器实例的实现中,您可以在视图上调用invalidate。啊,谢谢,我以为您的可运行代码解决了这个问题,但DB线程似乎仍然是最后一个完成的。我明白你对监听器接口的意思,但我不确定我是否会去管理它,因为我对这个接口下发生的事情了解得不够。我使用了你的代码的一个变体,让它在db线程之后运行invalidate。看起来这不是viewpager的问题,而是与db的viewquerys有关,我认为db线程最后完成,因为它运行很长时间。使用post()将线程排队运行,以便它们按顺序运行。但是它们也在UI线程上运行,所以您不希望像DB查询这样执行长时间运行的任务。