필자가 원하는 것은 ViewPager의 각 페이지마다 새로운 별도의 타이머를 만드는 것입니다. 내 현재 실현에는 모든 페이지에 대해 하나의 처리기가 포함되어 있습니다. ViewPager.OnPageChangeListener.onPageSelected()를 사용하여 새 TimerTask를 시작합니다. 그러나 응용 프로그램을 실행하는 동안 볼 수 있듯이 runnables 스택과 타이머는 모든 콜백을 제거하려고해도 모든 textviews를 한 번에 빠르고 더 업데이트합니다. 핸들러.ViewPager - 각 페이지에서 다른 타이머를 시작하는 방법은 무엇입니까?
작동 방식 : 페이지 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();
}
});
Runnable를 구현 : 새 doTick의 Runnable 인스턴스를 않습니다
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);
}
}
이제 textViews를 사용해도됩니다. 그러나 한 가지가 있습니다. 타이머 스택과 초는 페이지를 스 와이프 할 때마다 빠르며 콜백은 제거되지 않는 것 같습니다. – sonderlain
각 인스턴스에서 removeCallBack을 호출 하시겠습니까? 당신의 runnable을 콘솔에 출력하면, 그들은 당신에게 "주소"를 줄 것이다 : 당신이 그것을 만들 때마다 그리고 removecallbacks를 호출 할 때마다 그것들을 출력하라. 일치해야합니다. – Snicolas
고마워,하지만이 물건으로 알아 내지 못했어. android.os.CountDownTimer를 사용하여 간단하게 문제를 해결했지만 꽤 잘 맞았습니다. – sonderlain