当我使用countdowntimer切换Tab(片段)时App崩溃

时间:2014-09-24 04:05:02

标签: android android-fragments tabs countdowntimer

我是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时。它工作正常,所以我提出倒数计时器必定导致崩溃。

提前致谢。

1 个答案:

答案 0 :(得分:3)

当您远离它时,您的片段视图会被破坏。但是,你的计时器继续运行。

这意味着在导航到其他选项卡后,您将在下一个计时器时间点获得NullPointerException。

要防止这种情况,请在onDestroyView()

中取消您的计时器

此外,在onActivityCreated(Bundle)中启动计时器会更安全,因为您可以保证在那时创建您的片段View。

有关详细信息,请参阅片段生命周期:

http://developer.android.com/reference/android/app/Fragment.html#Lifecycle