android viewpager 不间断自动滚动

Non stop auto scroll of viewpager in android

我已经使用计时器自动滑动 viewpager。但在到达最后一页后,计时器停止。如何让它再次从第一页继续?

final Handler mHandler = new Handler();
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            pager.setCurrentItem(page++);

        }
    };

    int delay = 1000; // delay for 1 sec.

    int period = 4000; // repeat every 4 sec.

    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

    public void run() {

         mHandler.post(mUpdateResults);

    }

    }, delay, period);
final Runnable mUpdateResults = new Runnable() {
    public void run() {
        int numPages = pager.getAdapter().getCount();
        page = (page + 1) % numPages;
        pager.setCurrentItem(page);

    }
};

这将在超出寻呼机限制时将当前项目设置为 0

以下回答会有所帮助;

 TimerTask timer = new TimerTask() {
    @Override
    public void run() {
      handler.post(new Runnable() {

         @Override
             public void run() {
                int numPages = viewPager.getAdapter().getCount();
                page = (page + 1) % numPages;
                viewPager.setCurrentItem(page);
            }
      });
 }
};
Timer time = new Timer();
time.schedule(timer, 0, 5000);

2021 年最新答案 设置 viewPager 适配器后

 private Runnable runnable = null;

 public void function DisplaySlider(){

sliderItemAdapter = new SliderItemAdapter(getActivity(), mSliderList);//push the data to the adapter
mViewPager.setAdapter(sliderItemAdapter); //set the adapter to the view pager
startAutoSlider(sliderItem.getCount());

}

private void startAutoSlider(final int count) {

runnable = new Runnable() {
    @Override
    public void run() {
        int pos = mViewPager.getCurrentItem();
        pos = pos + 1;
        if (pos >= count) pos = 0;
        mViewPager.setCurrentItem(pos);
        handler.postDelayed(runnable, 3000);
    }
};
handler.postDelayed(runnable, 3000);

}

最后不要忘记从回调中释放内存

  @Override
      public void onDestroy() {
if (runnable != null) handler.removeCallbacks(runnable);
super.onDestroy();

}

Please try this once.

            val handler = Handler()
            var page: Int? = 0
            val Update = Runnable {
                val numPages: Int = yourList.size
                page = (page?.plus(1))?.rem(numPages)
                viewPager!!.setCurrentItem(page!!, true)
            }

            val timer: Timer = Timer()
            timer!!.schedule(object : TimerTask() {
                // task to be scheduled
                override fun run() {
                    handler.post(Update)
                }
            }, 4000, 4000)