私が望むのは、ViewPager のページごとに新しい個別のタイマーを作成することだけです。私の現在の認識には、すべてのページに対する 1 つのハンドラーが含まれています。ViewPager.OnPageChangeListener.onPageSelected() を使用して新しい TimerTask を開始しますが、アプリケーションの動作中にわかるように、ランナブル スタックとタイマーはどんどん速くなり、すべてのテキストビューを一度に更新します。ハンドラー。
動作方法: ページ 1 にスワイプ — タイマー 1 が開始、ページ 2 にスワイプ — タイマー 1 がリセットおよび停止、タイマー 2 が開始など。
viewPager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int page) {
}
public void onPageScrolled(int position, float arg1, int arg2) {
}
public void onPageSelected(int position) {
View currentPage = ((QuestionPagerAdapter) viewPager.getAdapter()).get(position);
timerText = (TextView) currentPage.findViewById(R.id.timerText);
handler.removeCallbacks(doTick);
if (timerText != null) startTimer();
}
});
実行可能な実現:
final Runnable doTick = new Runnable() {
public void run() {
seconds--;
if (seconds == -1) {
minutes--;
seconds = 59;
}
String secText = String.valueOf(seconds);
if (seconds < 10) secText = "0" + secText;
timerText.setText("0" + String.valueOf(minutes) + ":" + secText);
viewPager.getAdapter().notifyDataSetChanged();
}
};
private void startTimer() {
for (int i = 1; i <= seconds; i++) {
TimerTask task = new TimerTask() {
@Override
public void run() {
handler.post(doTick);
}
};
timer.schedule(task, i * 1000);
}
}