Android ViewPager change automatiquement la page
Je veux programmer une action pour changer automatiquement mon ViewPager pages.
J'ai essayé:
@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);
mais je suis toujours:
E/AndroidRuntime(5381): FATAL EXCEPTION: Timer-0
E/AndroidRuntime(5381): java.lang.IllegalStateException: Must be called from main thread of process
Je suis déjà dans le thread principal de droite? Comment puis-je résoudre ce problème?
Merci pour votre temps.
EDIT:
====================================
Merci pour toutes vos réponses. Sur la base de ces réponses, je suis tombé sur 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);
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);
Lequel est le mieux ou ce sont les mêmes?
Merci une fois de plus.
source d'informationauteur GuilhE
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez utiliser le thread principal de l'interface utilisateur, alors vous devez utiliser virage à la main.
Façon la plus simple façon de le résoudre est de créer un postDelayed praticable
comme Vous pouvez le voir, il sera en boucle infinitelly. Lorsque vous voulez l'arrêter, tout simplement appeler
La TimerTask des courses sur c'est propre thread ( = pas le thread d'INTERFACE utilisateur).
Vous pouvez simplement appeler setCurrentItem directement sur le thread principal à l'aide d'un Gestionnaire.