我是Android开发的新手,我制作了一个有倒数计时器的应用程序。 倒数计时器工作正常,但当我切换标签时,它会在我切换时崩溃。
这是我在选项卡1上的代码:
public class FragmentTab1 extends Fragment {
Calendar calendar = new GregorianCalendar();
int year = calendar.getTime().getYear();
String year1 = String.valueOf(year);
Date date = new Date(year + 1,0,1,0,0);
long dtMili = System.currentTimeMillis();
Date dateNow = new Date(dtMili);
long remain = date.getTime() - dateNow.getTime();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance){
View rootView = inflater.inflate(R.layout.fragment1, container,false);
Log.d("Current Year",year1);
return rootView;
}
CountDownTimer countDownTimer = new CountDownTimer(remain, 1000){
@Override
public void onTick(long millisUntilFinished) {
// TODO Auto-generated method stub
//action for every tick of the countdown.
TextView tv = (TextView) getView().findViewById(R.id.txtTimer);
tv.setText(timeCalculate(millisUntilFinished/1000) + " Countdown");
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
//action for when the timer has finished
TextView tv = (TextView) getView().findViewById(R.id.txtTimer);
tv.setText("Happy New Year");
}
}.start();
我在tabListener上没有任何添加的代码。 当我评论Countdowntimer时。它工作正常,所以我提出倒数计时器必定导致崩溃。
提前致谢。
答案 0 :(得分:3)
当您远离它时,您的片段视图会被破坏。但是,你的计时器继续运行。
这意味着在导航到其他选项卡后,您将在下一个计时器时间点获得NullPointerException。
要防止这种情况,请在onDestroyView()
中取消您的计时器此外,在onActivityCreated(Bundle)中启动计时器会更安全,因为您可以保证在那时创建您的片段View。
有关详细信息,请参阅片段生命周期:
http://developer.android.com/reference/android/app/Fragment.html#Lifecycle