Reputation: 207
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
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
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
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
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