2012-05-28 107 views
2

我使用了android ViewPager:http://developer.android.com/reference/android/support/v4/view/ViewPager.htmlAndroid的碎片和獨立線程中

這個類可以讓你基本上是通過他們就打了一堆意見或片段成組和頁面的輕鬆。當我嘗試創建一個單獨的線程隨機隨機瀏覽視圖時,會出現我的問題。

我擴展了一個線程,它會在我通過參數傳入的ViewPager上調用setCurrentItem。當我這樣做,我收到這樣的:

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

我想所有我必須做些什麼來解決,這將是從我activityfragment調用一個方法,所以我創建changePageFromActivity做骯髒的工作,並呼籲通過傳遞我的活動到我的線程。但是那也行不通。以下是完整的堆棧跟蹤:

FATAL EXCEPTION: Thread-11 
java.lang.IllegalStateException: Must be called from main thread of process 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1392) 
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431) 
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:160) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:804) 
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:433) 
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:405) 
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:397) 
at com.lyansoft.music_visualizer.MusicVisualizerActivity.changePageFromActivity(MusicVisualizerActivity.java:144) 
at com.lyansoft.music_visualizer.ShuffleThread.run(ShuffleThread.java:38) 

做一些研究我得知片段很容易被破壞,並導致不同的線程,從而防止ViewPager只是確信,我想的方法都必須從調用的任何問題之後主要活動。

所以我的問題是:

是否有可能注入沿

run() { while(condition) { methodIWantHere(); sleep(timeout); } } 

我的主要活動的線程裏面的東西線,而不破壞它?

什麼是更好的設計模式來達到我想要的效果? (即以一致的指定間隔更改視圖)

回答

8

A Handler將是一個明顯的選擇。

final Runnable changeView = new Runnable() 
{ 
    public void run() 
    { 
     methodIWantHere(); 
     handler.postDelayed(this, timeout); 
    } 
}; 

handler.postDelayed(changeView, timeout); 
+0

這正是我一直在尋找執行您的代碼塊!謝謝! – ebolyen

3

嘗試使用

runOnUiThread(Runnable action). 
+0

謝謝,不知道我是如何錯過的。 :) – ebolyen