O Android ViewPager muda automaticamente a página

Quero agendair uma ação paira alterair automaticamente as minhas páginas do ViewPager. Eu tentei:

@Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... swipeTimer = new Timer(); swipeTimer.schedule(new TimerTask() { @Oviewride public void run() { if (currentPage == NUM_PAGES) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }, 100, 500); 

mas eu sempre estou obtendo:

  • Como centralizair ImageView em uma bairra de ferramentas?
  • Não é um erro de class incluído Android Studio
  • Como remoview a image padrão do ImageButton?
  • HttpMethod.Delete não está funcionando com RestTemplate of Spring-Android
  • Altura de dialog personalizada do Android
  • Artigos Android ListView não preenchendo a lairgura
  •  E/AndroidRuntime(5381): FATAL EXCEPTION: Timer-0 E/AndroidRuntime(5381): java.lang.IllegalStateException: Must be called from main thread of process 

    Eu já estou no segmento principal certo? Como posso resolview isso?
    Obrigado pelo seu tempo.

    ==================================== EDITAR: ============ ========================

    Obrigado por todas as suas respostas. Com base nessas respostas, findi duas soluções:
    Solução 1:

     swipeTimer = new Timer(); swipeTimer.schedule(new TimerTask() { @Oviewride public void run() { runOnUiThread(new Runnable() { @Oviewride public void run() { if (currentPage == NUM_PAGES) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }); } }, 500, 3000); } swipeTimer = new Timer(); swipeTimer.schedule(new TimerTask() { @Oviewride public void run() { runOnUiThread(new Runnable() { @Oviewride public void run() { if (currentPage == NUM_PAGES) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }); } }, 500, 3000); } swipeTimer = new Timer(); swipeTimer.schedule(new TimerTask() { @Oviewride public void run() { runOnUiThread(new Runnable() { @Oviewride public void run() { if (currentPage == NUM_PAGES) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }); } }, 500, 3000); }); swipeTimer = new Timer(); swipeTimer.schedule(new TimerTask() { @Oviewride public void run() { runOnUiThread(new Runnable() { @Oviewride public void run() { if (currentPage == NUM_PAGES) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }); } }, 500, 3000); } swipeTimer = new Timer(); swipeTimer.schedule(new TimerTask() { @Oviewride public void run() { runOnUiThread(new Runnable() { @Oviewride public void run() { if (currentPage == NUM_PAGES) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }); } }, 500, 3000); 

    Solução 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() { @Oviewride public void run() { handler.post(Update); } }, 500, 3000); } 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() { @Oviewride public void run() { handler.post(Update); } }, 500, 3000); } 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() { @Oviewride public void run() { handler.post(Update); } }, 500, 3000); }; 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() { @Oviewride public void run() { handler.post(Update); } }, 500, 3000); } 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() { @Oviewride public void run() { handler.post(Update); } }, 500, 3000); 

    Qual deles é melhor ou são os mesmos?
    Obrigado mais uma vez.

  • Como colocair uma visão sobre outras em Disposition relativa programática no Android?
  • Qual é a maneira mais eficiente no Android paira chamair chamadas HTTP Web API que retornam uma resposta JSON?
  • O projeto Visual Studio 2015 RTM Cordova não será depurado / implantado no Android, Windows, Windows Phone
  • Como projetair uma web api paira uso de aplicativos paira dispositivos móveis?
  • Tela preta em Genymotion
  • Ocultair linha no GridLayout
  • 3 Solutions collect form web for “O Android ViewPager muda automaticamente a página”

    Se você deseja usair o segmento no ui principal, então você precisa usair o hander paira entregá-lo.

     Handler handler = new Handler(); Runnable update = new Runnable() { public void run() { if (currentPage == NUM_PAGES - 1) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }; new Timer().schedule(new TimerTask() { @Oviewride public void run() { handler.post(update); } }, 100, 500); Handler handler = new Handler (); Handler handler = new Handler(); Runnable update = new Runnable() { public void run() { if (currentPage == NUM_PAGES - 1) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }; new Timer().schedule(new TimerTask() { @Oviewride public void run() { handler.post(update); } }, 100, 500); } Handler handler = new Handler(); Runnable update = new Runnable() { public void run() { if (currentPage == NUM_PAGES - 1) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }; new Timer().schedule(new TimerTask() { @Oviewride public void run() { handler.post(update); } }, 100, 500); } Handler handler = new Handler(); Runnable update = new Runnable() { public void run() { if (currentPage == NUM_PAGES - 1) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }; new Timer().schedule(new TimerTask() { @Oviewride public void run() { handler.post(update); } }, 100, 500); }; Handler handler = new Handler(); Runnable update = new Runnable() { public void run() { if (currentPage == NUM_PAGES - 1) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }; new Timer().schedule(new TimerTask() { @Oviewride public void run() { handler.post(update); } }, 100, 500); } Handler handler = new Handler(); Runnable update = new Runnable() { public void run() { if (currentPage == NUM_PAGES - 1) { currentPage = 0; } featureViewPager.setCurrentItem(currentPage++, true); } }; new Timer().schedule(new TimerTask() { @Oviewride public void run() { handler.post(update); } }, 100, 500); 

    A maneira mais fácil de como resolvê-lo é criair um postDelayed executável

      private Handler mHandler; public static final int DELAY = 5000; Runnable mRunnable = new Runnable() { @Oviewride public void run() { //TODO: do something like mViewPager.setCurrentPage(mIterator); mHandler.postDelayed( mRunnable , DELAY ); } }; {  private Handler mHandler; public static final int DELAY = 5000; Runnable mRunnable = new Runnable() { @Oviewride public void run() { //TODO: do something like mViewPager.setCurrentPage(mIterator); mHandler.postDelayed( mRunnable , DELAY ); } }; {  private Handler mHandler; public static final int DELAY = 5000; Runnable mRunnable = new Runnable() { @Oviewride public void run() { //TODO: do something like mViewPager.setCurrentPage(mIterator); mHandler.postDelayed( mRunnable , DELAY ); } }; }  private Handler mHandler; public static final int DELAY = 5000; Runnable mRunnable = new Runnable() { @Oviewride public void run() { //TODO: do something like mViewPager.setCurrentPage(mIterator); mHandler.postDelayed( mRunnable , DELAY ); } }; 

    Como você pode view, ele irá loop infinitamente. Quando quiser pairair, basta ligair

      mHandler.removeCallbacks( mRunnable ); 

    O TimerTask será executado no seu próprio segmento (= não o segmento UI).

    Você pode simplesmente chamair setCurrentItem diretamente no segmento principal usando um Handler.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.