2014-02-21 35 views
0

我想一個搜索欄的片段連接到MediaPlayer的,但運行的是不是運行在所有。我在裏面放了一個log.i來查看它是否運行,但什麼也沒有發生。可運行沒有運行在所有的內部片段

我宣佈處理程序作爲一個全局變量:

Handler seekHandler; 
SeekBar sBar; 

然後在onCreateView

seekHandler = new Handler(); 
sBar = (SeekBar) v.findViewById(R.id.seekBar1); 

的Runnable:

Runnable run = new Runnable() { 

    @Override 
    public void run() { 
     sBar.setMax(mp.getDuration()); 
     sBar.setProgress(mp.getCurrentPosition()); 
     Log.i("TAG", "I'm running"); 
     seekHandler.postDelayed(this, 25); 
    } 
}; 

MP變量是MediaPlayer的。問題是Runnable甚至不會運行一次。我用我的類似應用程序的確切相同的代碼在活動,它的工作完全沒問題。這是因爲runnable在片段中的行爲不同嗎?此外,我使用TabLayout與ViewPager和2片段,如果這影響任何這一點。

+0

裏面訪問UI你從非主線程試圖請求,並設定進度。這應該不可能從一開始? – Tristan

回答

5

在處理程序可以再次提交之前,您必須至少運行一次。

從你的類,你應該叫seekHandler.post(run),或run.run();至少一次。

+2

完美。應該解決問題 – Raghunandan

+0

非常感謝! – Guy

0

您能否將代碼發佈到您執行Runnable的地方?從外觀上看,你必須使用 runOnUiThread(run);

因爲你從運行的