我正在尝试将SeekBar连接到片段中的MediaPlayer,但runnable根本没有运行。我在其中放了一个log.i来查看它是否运行但根本没有任何反应。
我将Handler声明为全局变量:
Handler seekHandler;
SeekBar sBar;
然后在 onCreateView :
seekHandler = new Handler();
sBar = (SeekBar) v.findViewById(R.id.seekBar1);
可运行:
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甚至没有执行过一次。我在活动中的类似应用程序中使用了完全相同的代码,并且它工作正常。这是因为runnables在片段中的行为方式不同吗?此外,我正在使用带有ViewPager和2片段的TabLayout,如果这会影响其中任何一个。
答案 0 :(得分:5)
在处理程序再次提交之前,您必须至少运行一次。
在课堂上,您应至少致电seekHandler.post(run)
或run.run();
一次。
答案 1 :(得分:0)
请您在执行Runnable的地方发布代码。根据它的外观,你将不得不使用 runOnUiThread(运行);
因为您正在从可运行的
中访问Ui