2011-11-01 85 views
6

我的目标很简单:与textview倒计时

在我的xml文件中,我有一个称为textView2的textview。

我需要的是一个倒计时,从15倒数到0,并且每次经过一秒,textview就会得到更新(如:15,14,13,12,11,10,9,8,7, 6,5,4,3,2,1,0)。

而且我也需要从it.Something获取当前时间一样

如果倒数计时器在第二个14,然后做这个...

我尝试这样做:

new CountDownTimer(30000, 1000) { 

     public void onTick(long millisUntilFinished) { 
      int j = (int) millisUntilFinished; 
      TextView textic = (TextView) findViewById(R.id.textView2); 
      textic.setText(j); 
     } 

     public void onFinish() { 

     } 
    }.start(); 

但该应用程序崩溃!怎么了?!

日志:

11-01 13:09:33.029:WARN/dalvikvm(388):线程ID = 1:螺纹与未捕获的异常(组= 0x40015560)11-01 13:09离开 : 33.049: ERROR/AndroidRuntime(388):致命例外:main 11-01 13:09:33.049: 错误/ AndroidRuntime(388):java.lang.RuntimeException:无法启动 活动 ComponentInfo {think.smart/think .smart.ThinkyoursmartActivity}: java.lang.NullPointerException 11-01 13:09:33.049: 错误/ AndroidRuntime(388):at android.app.Ac tivityThread.performLaunchActivity(ActivityThread.java:1647) 11-01 13:09:33.049:ERROR/AndroidRuntime(388):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 11-01 13:09 :33.049:ERROR/AndroidRuntime(388):at android.app.ActivityThread.access $ 1500(ActivityThread.java:117)11-01 13:09:33.049:ERROR/AndroidRuntime(388):at android.app。 ActivityThread $ H.handleMessage(ActivityThread.java:931) 11-01 13:09:33.049:ERROR/AndroidRuntime(388):at android.os.Handler.dispatchMessage(Handler.java:99)11-01 13 :09:33.049:错误/ AndroidRuntime(388):在 android.os.Looper.loop(Looper.java:123)11-01 13:09:33.049: 错误/ AndroidR (388):at android.app.ActivityThread.main(ActivityThread.java:3683)11-01 13:09:33.049:ERROR/AndroidRuntime(388):at java.lang.reflect.Method.invokeNative(本地方法)11-01 13:09:33.049:错误/ AndroidRuntime(388):在 java.lang.reflect.Method.invoke(Method.java:507)11-01 13:09:33.049: 错误/ AndroidRuntime(388):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839) 11-01 13:09:33.049:ERROR/AndroidRuntime(388):at com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:597)11-01 13:09:33.049:ERROR/AndroidRuntime(388):at dalvik.system.NativeStart.main(Native Method)11-01 13:09 :33.049: 错误/ AndroidRuntime(388):引起:java.lang.NullPointerException 11-01 13:09:33.049:错误/ AndroidRuntime(388):在 think.smart.ThinkyoursmartActivity.onCreate(ThinkyoursmartActivity.java:34) 11-01 13:09:33.049:ERROR/AndroidRuntime(388):at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 11-01 13:09:33.049:ERROR/AndroidRuntime(388):at android.app.ActivityThread.performLaunchActivity(ActivityThread。Java的:1611)

+1

看看[CountDownTimers](http://developer.android.com/reference/android/os/CountDownTimer.html)。这可能会让你的生活变得更容易。 –

回答

15

试试这个:----

TextView textic = (TextView) findViewById(R.id.textView2); 

CountDownTimer Count = new CountDownTimer(30000, 1000) { 
    public void onTick(long millisUntilFinished) { 
     textic.setText("Seconds remaining: " + millisUntilFinished/1000); 
    } 

    public void onFinish() { 
     textic.setText("Finished"); 
    } 
}; 

Count.start(); 
+3

我只能通过@覆盖它们来获取onTick和onFinish方法。真的,最好输入CountDownT 并让你的IDE为你完成所有的样板。此外,按照惯例,“Count”变量应该是“count” - 它是一个变量而不是类。 – stackunderflow

1

我认为这是从UI线程以外更新UI元素的物质

尝试以下方法:

new CountDownTimer(30000, 1000) { 

public void onTick(long millisUntilFinished) { 
    final int j = (int) millisUntilFinished; 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      TextView textic = (TextView) findViewById(R.id.textView2); 
      textic.setText(j); 
     } 
    }); 
    } 

    public void onFinish() {   
    } 
}.start();