Android的ViewPager自动换页换页、Android、ViewPager

由网友(听风与我讲你)分享简介:我想安排一个动作自动改变我的ViewPager页面。我尝试过:I want to schedule an action to change automatically my ViewPager pages.I've tried:@Overridepublic void onCreate(Bundle save...

我想安排一个动作自动改变我的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);
阅读全文

相关推荐

最新文章