Android的ViewPager自动换页 [英] Android ViewPager automatically change page

查看:173
本文介绍了Android的ViewPager自动换页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我想安排一个动作自动改变我的ViewPager页面。 我尝试过:


I want to schedule an action to change automatically my ViewPager pages. I've tried:

@Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ...

    swipeTimer = new Timer();
    swipeTimer.schedule(new TimerTask() {

         @Override
         public void run() {
            if (currentPage == NUM_PAGES) {
                currentPage = 0;
            }
            featureViewPager.setCurrentItem(currentPage++, true);
         }
    }, 100, 500);

但我总是因为:

but I'm always getting:

E/AndroidRuntime(5381): FATAL EXCEPTION: Timer-0
E/AndroidRuntime(5381): java.lang.IllegalStateException: Must be called from main thread of process

我已经在主线程吧?我该如何解决这个问题?
感谢您的时间。

I'm already in main thread right? How can I solve this?
Thanks for your time.

==================================== 编辑: ====================================

感谢您的答案。基于这些反应,我碰到2解决方案:
解决方法1:

==================================== ====================================

Thanks for all your answers. Based on these responses I came across 2 solutions:
Solution 1:

swipeTimer = new Timer();
            swipeTimer.schedule(new TimerTask() {

                @Override
                public void run() {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (currentPage == NUM_PAGES) {
                                currentPage = 0;
                            }
                            featureViewPager.setCurrentItem(currentPage++, true);
                        }
                    });
                }
            }, 500, 3000);

解决方案2:

Solution 2:

final Handler handler = new Handler();
                final Runnable Update = new Runnable() {
                    public void run() {
                        if (currentPage == NUM_PAGES) {
                            currentPage = 0;
                        }
                        featureViewPager.setCurrentItem(currentPage++, true);
                    }
                };

            swipeTimer = new Timer();
            swipeTimer.schedule(new TimerTask() {

                @Override
                public void run() {
                    handler.post(Update);
                }
            }, 500, 3000);

哪一个是好还是他们是一样的吗?
再次感谢。

Which one is better or they are the same?
Thanks once again.

推荐答案

如果你想使用线程在主UI,那么你需要使用投手出手了。

If you want to use thread in main ui then you need to use hander to hand it.

Handler handler = new Handler();

        Runnable Update = new Runnable() {
            public void run() {
                if (currentPage == NUM_PAGES - 1) {
                    currentPage = 0;
                }
                featureViewPager.setCurrentItem(currentPage++, true);
            }
        };

        swipeTimer = new Timer();
        swipeTimer.schedule(new TimerTask() {

            @Override
            public void run() {
                handler.post(Update);
            }
        }, 100, 500);

这篇关于Android的ViewPager自动换页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆