好吧,问题出在碎片上。我已经在
onViewCreated()方法
这就产生了问题。
所以解决方案是初始化oncreate()方法的毫秒值,并使用该值启动onviewcreated()方法的倒计时。并且还使用onresume()方法继续相同的计时器,尽管片段是通过选项卡更改的。(为了避免重复代码,还创建了一个计时器的小方法。)
碎片代码:
public class FragmentA extends Fragment {
private long millisecvalue;
TextView mCountDown;
CountDownTimer countDownTimer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
millisecvalue = 1000000; //initial timer value
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_A, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mCountDown = view.findViewById(R.id.tv1);
startContinueTimer();
}
private void startContinueTimer() {
countDownTimer = new CountDownTimer(millisecvalue, 1000) {
@Override
public void onTick(long millisUntilFinished) {
long check = millisUntilFinished;
int hour = (int) check / (1000 * 60 * 60);
check = (int) (check - (hour * 1000 * 60 * 60));
int min = (int) check / (1000 * 60);
check = (int) (check - (min * 1000 * 60));
int sec = (int) check / (1000);
mCountDown.setText(hour + " : " + min + " : " + sec);
millisecvalue = millisUntilFinished; //update milisecvalue "VERY IMPORTANT"
}
@Override
public void onFinish() {
mCountDown.setText("Reached");
}
}.start();
}
@Override
public void onResume() {
super.onResume();
startContinueTimer();
}
}
希望这有帮助。如果有更好的方法,请告诉我!