简体   繁体   English

Android:Viewpager OnPageChangeListener onpageselected扰乱了幻灯片动画

[英]Android: Viewpager OnPageChangeListener onpageselected disturbs slide animation

I've seen some similar posts here but no appropriate answer. 我在这里看过一些类似的帖子,但没有合适的答案。

I use the event onpageselected in a viewpager to execute a function. 我使用viewpager中选择的事件onpage来执行一个函数。 This function is network dependent so it can take some time. 此功能取决于网络,因此可能需要一些时间。 But then the slide animation looks laggy. 但随后幻灯片动画看起来很迟钝。

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) {

            }
        });

Heavy Task: 繁重任务:

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

    }

Is there a way to solve this? 有办法解决这个问题吗? Thanks 谢谢

Do the heavy task with an AsyncTask . 使用AsyncTask执行繁重的任务。 Check out the accepted answer here AsyncTask: where does the return value of doInBackground() go? 在这里查看接受的答案AsyncTask:doInBackground()的返回值在哪里?

EDIT: You need to return a placeholder in the getView first. 编辑:您需要先在getView返回一个占位符。 If the getView method has to wait for the thread to finish, then the animation will lag for sure. 如果getView方法必须等待线程完成,那么动画肯定会滞后。 The returned placeholder can later be used to do posting after thread has finished. 返回的占位符稍后可用于在线程完成后进行发布。

You could use the callback 你可以使用回调

public void onPageScrollStateChanged(int i)

instead of public void onPageSelected(int i) with 而不是public void onPageSelected(int i) with

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

if you have a task that cannot be executed on a different thread. 如果您有一个无法在其他线程上执行的任务。 This will be called after the animation is finished. 这将在动画结束后调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM