2014-03-03 26 views
1

我想在我的activity中運行類似照片顯示的內容。我將碎片加載到ViewPager,然後模擬切換視圖。ViewPager開關在線程中模擬Android

Runnable runnable = new Runnable(){ 
     @Override 
     public void run() { 
      pager.setCurrentItem(0); 
      while(true){ 
       try { 
        Thread.sleep(Settings.showDelay*1000); 
        if(pager.getCurrentItem()==photos.size()-1){ 
         pager.setCurrentItem(0); 
                 Thread.sleep(Settings.showDelay*1000); 

        }else 

         pager.setCurrentItem(pager.getCurrentItem()+1, true); 

       } catch (InterruptedException e) { 

       } 

     } 
     } 
    }; 

    Thread thread = new Thread(runnable); 
    thread.start(); 

我把它放在我的onCreate方法和3張圖片它完美,但對4個或更多的:

java.lang.IllegalStateException: Must be called from main thread of process 
+0

不要使用線程來製作滑動動畫因爲它將在UI線程上運行並在UI中進行更改。這就是爲什麼它給出這樣的錯誤。 – GrIsHu

+0

但我想要這些更改。我需要更改此傳呼機中的currentItem而無需在屏幕上觸摸 – szpiku

+0

嘗試使用我已發佈爲答案的代碼。 – GrIsHu

回答

3

嘗試下面的代碼來切換視圖尋呼機。我已經使用它,它爲我的魅力。

Timer timer = new Timer(); 

public void SwitchPage(int seconds) { 
    timer = new Timer(); // At this line a new Thread will be created 
timer.schedule(new SwitchPageTask(), 6000, seconds * 1000); // delay in milliseconds 
} 


class SwitchPageTask extends TimerTask { 

    @Override 
    public void run() { 

     // As the TimerTask run on a separate thread from UI thread we have 
     // to call runOnUiThread to do work on UI thread. 
     runOnUiThread(new Runnable() { 
      public void run() { 
            if(pager.getCurrentItem()==photos.size()-1) 
            { 
             pager.setCurrentItem(0); 

            }else 
       {pager.setCurrentItem(pager.getCurrentItem() + 1);} 
      } 
     }); 
    } 
} 

只需要傳遞秒來切換viewpager。它會繼續運行並切換到下一個項目。

 SwitchPage(6); //it will switch the view on every 6 seconds. 
+0

它的工作,非常感謝;) – szpiku

+0

@szpiku很高興幫助。不客氣:) – GrIsHu

+0

它的魔力......謝謝 –