2014-09-24 42 views
-1

即时通讯新的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

粘贴logcat的崩溃您的应用程序 – XtreemDeveloper 2014-09-24 04:27:45

回答

3

当你离开它时,你的片段的视图被破坏。然而,你的计时器继续运行。

这意味着在您导航到不同的选项卡后,您将在下一个计时器滴答声中获得NullPointerException。

为了防止这种情况,取消在onDestroyView()定时器

而且,它会是更安全的开始onActivityCreated(束)的计时器,因为你会保证届时已经创建了自己的片段视图。

更多信息,请参阅该片段上的生命周期:

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

+0

感谢以后有什么错误的表现!有时我觉得很难在androids文档页面上导航。他们总是给你提供大量的信息。当然还有少量IMO样品。再次感谢。 – JamParaiso 2014-09-24 05:00:59

+1

很高兴帮助!这就是为什么堆栈溢出非常有用,呃?我们都遇到了其他人已经遇到的现实世界问题。 – 2014-09-24 05:33:20

相关问题