2012-05-17 7 views

Antwort

9

Verwenden Sie die CountDownTimer Klasse, übergeben Sie einen großen Wert an (hier gab ich 1000000000) für CountDownTimer Leben.

Beispielcode ::

CountDownTimer newtimer = new CountDownTimer(1000000000, 1000) { 

      public void onTick(long millisUntilFinished) { 
       Calendar c = Calendar.getInstance(); 
       textView.setText(c.get(Calendar.HOUR)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND)); 
      } 
      public void onFinish() { 

      } 
     }; 
     newtimer.start(); 

während die Aktivität schließen, rufen Sie die folgende Funktion

newtimer.cancel(); 
5

Sie können Thread Klasse mit Schlaf (1000) verwenden; oder Sie können TimerTask Klasse verwenden.

+0

+1 für kurze und süße Antwort :) –

+0

Vielen Dank Sir-Ji. – Lucifer

+0

+1, für TimerTask .. – user370305

23

Dieser Kodex ist ..

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 
    Thread myThread = null; 

    Runnable myRunnableThread = new CountDownRunner(); 
    myThread= new Thread(myRunnableThread); 
    myThread.start(); 

} 

public void doWork() { 
    runOnUiThread(new Runnable() { 
     public void run() { 
      try{ 
       TextView txtCurrentTime= (TextView)findViewById(R.id.myText); 
        Date dt = new Date(); 
        int hours = dt.getHours(); 
        int minutes = dt.getMinutes(); 
        int seconds = dt.getSeconds(); 
        String curTime = hours + ":" + minutes + ":" + seconds; 
        txtCurrentTime.setText(curTime); 
      }catch (Exception e) {} 
     } 
    }); 
} 


class CountDownRunner implements Runnable{ 
    // @Override 
    public void run() { 
      while(!Thread.currentThread().isInterrupted()){ 
       try { 
       doWork(); 
        Thread.sleep(1000); // Pause of 1 Second 
       } catch (InterruptedException e) { 
         Thread.currentThread().interrupt(); 
       }catch(Exception e){ 
       } 
      } 
    } 
} 
+0

Danke Bhavin, es funktioniert sehr gut. –

+0

Ich frage mich, wie man das mit Fragmenten implementiert. Ich habe einen Fehler in ... runOnUiThread (new Runnable() { – princepiero

+0

Es funktioniert wie genial, aber ich muss den Thread zu töten, wenn die Aktivität aufhört.Wie das zu tun. – user

1

hierfür sollten Sie versuchen, chronometer, damit Sie Ihr Ziel

Beispielcode von Chronometer viel Glück erfüllen kann, ist hier:

in Haupt .xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 
<Chronometer 
android:id="@+id/chronometer" 
android:layout_gravity="center_horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
/> 
<Button 
android:id="@+id/buttonstart" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Start" 
/> 
<Button 
android:id="@+id/buttonstop" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Stop" 
/> 
<Button 
android:id="@+id/buttonreset" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Reset" 
/> 
</LinearLayout> 

in Java-Datei

package com.exercise.AndroidChronometer; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.SystemClock; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Chronometer; 

public class AndroidChronometer extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final Chronometer myChronometer = (Chronometer)findViewById(R.id.chronometer); 
     Button buttonStart = (Button)findViewById(R.id.buttonstart); 
     Button buttonStop = (Button)findViewById(R.id.buttonstop); 
     Button buttonReset = (Button)findViewById(R.id.buttonreset); 

     buttonStart.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
    // TODO Auto-generated method stub 
    myChronometer.start(); 
    }}); 

     buttonStop.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
    // TODO Auto-generated method stub 
    myChronometer.stop(); 

    }}); 

     buttonReset.setOnClickListener(new Button.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
    // TODO Auto-generated method stub 
    myChronometer.setBase(SystemClock.elapsedRealtime()); 

    }}); 


    } 
} 
11

Verwendung TextClock. Dies ändert sich dynamisch, ohne einen separaten Code zu haben.

 <TextClock 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:id="@+id/textClock" 
      android:layout_weight="0.11" 
      android:textStyle="bold" 
      android:textSize="22sp" 
      android:format24hours="hh:mm:ss a EEE MMM d"/> 

    TextClock textClock = (TextClock) findViewById(R.id.textClock); 
    textClock.setFormat12Hour(null); 
    //textClock.setFormat24Hour("dd/MM/yyyy hh:mm:ss a"); 
    textClock.setFormat24Hour("hh:mm:ss a EEE MMM d"); 
+0

Danke für das. Habe so viele schlechte Hacks gefunden, bevor ich dazu kam Dies. –