Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 Android:Viewpager OnPageChangeListener onpageselected干扰幻灯片动画_Java_Android_Listview_Android Fragments_Android Viewpager - Fatal编程技术网

Java Android:Viewpager OnPageChangeListener onpageselected干扰幻灯片动画

Java Android:Viewpager OnPageChangeListener onpageselected干扰幻灯片动画,java,android,listview,android-fragments,android-viewpager,Java,Android,Listview,Android Fragments,Android Viewpager,我在这里看到过一些类似的帖子,但没有合适的答案 我使用viewpager中选择的事件onpageselected执行一个函数。此函数依赖于网络,因此可能需要一些时间。但是幻灯片动画看起来很滞后 mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, in

我在这里看到过一些类似的帖子,但没有合适的答案

我使用viewpager中选择的事件onpageselected执行一个函数。此函数依赖于网络,因此可能需要一些时间。但是幻灯片动画看起来很滞后

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i2) {

            }

            @Override
            public void onPageSelected(int i) {
                makeSomeHeavyTask();
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
繁重的任务:

public void makeSomeHeavyTask() {
        handler.post(new QueryRunnable());

    }

有办法解决这个问题吗?谢谢

使用
异步任务
完成繁重的任务。在这里查看接受的答案


编辑:首先需要在
getView
中返回占位符。如果
getView
方法必须等待线程完成,那么动画肯定会延迟。返回的占位符可以在线程完成后用于发布。

您可以使用回调

public void onPageScrollStateChanged(int i)
而不是
public void onPageSelected(int i)

if(i == ViewPager.SCROLL_STATE_IDLE) {
    //your task
}

如果您有无法在其他线程上执行的任务。这将在动画完成后调用。

我们有没有可能看到代码?您是否在一个单独的线程中执行“重任务”而不影响主UI?@MartinCazares这就是我要查询的代码:)是的,它应该在一个单独的线程中。
handler.post(new QueryRunnable())将不会在另一个线程上运行QueryRunnable()。我已经通过处理程序在另一个线程中创建了该处理程序。(请参见函数makesomeheavytask()中的内容。有没有办法在异步任务中制作幻灯片动画?!动画只能在UI/主线程中完成。其他所有内容都可以卸载到线程中。只有在繁重的任务没有操纵UI的情况下,如果您希望在页面发生变化时更改视图,这才有效。