私はアンドロイド ViewPager を使用しています: http://developer.android.com/reference/android/support/v4/view/ViewPager.html
このクラスを使用すると、基本的に一連のビューまたはフラグメントをグループに平手打ちし、それらを簡単にページングできます。ビューをランダムにシャッフルする別のスレッドを作成しようとすると、問題が発生します。
引数を介して渡した 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); } }
メイン アクティビティのスレッド内で中断せずに?
また
私が望む効果を達成するためのより良いデザインパターンは何ですか? (これは、一貫した指定された間隔でビューを変更することです)