Nivedha S
Nivedha S

Reputation: 207

Non stop auto scroll of viewpager in android

I have used timer to auto swipe the viewpager. But after reaching the last page the timer stops. How to make it to continue again from the first page?

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

Upvotes: 2

Views: 6671

Answers (4)

Surendar D
Surendar D

Reputation: 5644

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)

  

      


            

Upvotes: 0

mohamed ayed
mohamed ayed

Reputation: 648

Latest answer 2021 After you set your viewPager adapter

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

}

And finally don`t forget to free the memory from the callbacks

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

}

Upvotes: 3

Vishal Vaishnav
Vishal Vaishnav

Reputation: 3422

Below answer will be helpful;

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

Upvotes: -1

alfongj
alfongj

Reputation: 2273

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

    }
};

That will set the current item to 0 when it exceeds the pager limits

Upvotes: 3

Related Questions