Ich habe mich umgesehen und nichts scheint zu funktionieren, was ich bisher ausprobiert habe ...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.deskclock);
TextView tvTime = (TextView) findViewById(R.id.tvTime);
TextView tvDate = (TextView) findViewById(R.id.tvDate);
Java.util.Date noteTS = Calendar.getInstance().getTime();
String time = "hh:mm"; // 12:00
tvTime.setText(DateFormat.format(time, noteTS));
String date = "dd MMMMM yyyy"; // 01 January 2013
tvDate.setText(DateFormat.format(date, noteTS));
Grundsätzlich möchte ich, dass die setText-Methoden etwa jede Sekunde aktualisiert oder aktualisiert werden, sodass meine Uhr tatsächlich so funktioniert, wie sie sollte. Ich habe Methoden wie Handler und Run gesehen und nichts hat funktioniert, also wäre jede Hilfe großartig danke. :)
Fügen Sie der onCreate () - Methode folgenden Code hinzu:
Thread thread = new Thread() {
@Override
public void run() {
try {
while (!thread.isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
// update TextView here!
}
});
}
} catch (InterruptedException e) {
}
}
};
thread.start();
Dieser Code startet einen Thread, der in jeder Runde 1000 Millisekunden schläft.
Es ist eine sehr alte Frage und ich bin sicher, dass es da draußen viele Ressourcen gibt. Es ist jedoch nie zu viel, das Wort zu verbreiten, um auf der sicheren Seite zu sein. Wenn jemand anderes jemals das erreichen möchte, was das OP verlangt, können Sie Folgendes verwenden: Android.widget.TextClock
.
TextClock Dokumentation hier .
Folgendes habe ich verwendet:
<Android.widget.TextClock
Android:id="@+id/digitalClock"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:timeZone="GMT+0000" <!--Greenwich -->
Android:format24Hour="dd MMM yyyy k:mm:ss"
Android:format12Hour="@null"
Android:textStyle="bold"
Android:layout_alignParentEnd="true" />
Wenn Sie die Antwort von @endian erweitern, können Sie einen Thread verwenden und eine Methode zum Aktualisieren der TextView aufrufen. Nachfolgend finden Sie einen Code, den ich sofort erstellt habe.
Java.util.Date noteTS;
String time, date;
TextView tvTime, tvDate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.deskclock);
tvTime = (TextView) findViewById(R.id.tvTime);
tvDate = (TextView) findViewById(R.id.tvDate);
Thread t = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
updateTextView();
}
});
}
} catch (InterruptedException e) {
}
}
};
t.start();
}
private void updateTextView() {
noteTS = Calendar.getInstance().getTime();
String time = "hh:mm"; // 12:00
tvTime.setText(DateFormat.format(time, noteTS));
String date = "dd MMMMM yyyy"; // 01 January 2013
tvDate.setText(DateFormat.format(date, noteTS));
}
Wenn Sie die Zeit in Textansicht anzeigen möchten, verwenden Sie besser Chronometer oder TextClock
Using Chronometer: Dies wurde in API 1 hinzugefügt. Es hat viele Optionen zum Anpassen.
Your xml
<Chronometer
Android:id="@+id/chronometer"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textSize="30sp" />
Your activity
Chronometer mChronometer=(Chronometer) findViewById(R.id.chronometer);
mChronometer.setBase(SystemClock.elapsedRealtime());
mChronometer.start();
Using TestClock: Dieses Widget wurde in API Level 17 eingeführt. Ich persönlich mag Chronometer.
Your xml
<TextClock
Android:id="@+id/textClock"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="30dp"
Android:format12Hour="hh:mm:ss a"
Android:gravity="center_horizontal"
Android:textColor="#d41709"
Android:textSize="44sp"
Android:textStyle="bold" />
Das ist es, du bist fertig.
Sie können jedes dieser beiden Widget verwenden. Das macht dein Leben leicht.
Sie können Timer anstelle von Thread verwenden. Das ist mein ganzer Code
package dk.tellwork.tellworklite.tabs;
import Java.util.Timer;
import Java.util.TimerTask;
import Android.annotation.SuppressLint;
import Android.app.Activity;
import Android.os.Bundle;
import Android.os.Handler;
import Android.os.Message;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.TextView;
import dk.tellwork.tellworklite.MainActivity;
import dk.tellwork.tellworklite.R;
@SuppressLint("HandlerLeak")
public class HomeActivity extends Activity {
Button chooseYourAcitivity, startBtn, stopBtn;
TextView labelTimer;
int passedSenconds;
Boolean isActivityRunning = false;
Timer timer;
TimerTask timerTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_home);
chooseYourAcitivity = (Button) findViewById(R.id.btnChooseYourActivity);
chooseYourAcitivity.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//move to Activities tab
switchTabInActivity(1);
}
});
labelTimer = (TextView)findViewById(R.id.labelTime);
passedSenconds = 0;
startBtn = (Button)findViewById(R.id.startBtn);
startBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (isActivityRunning) {
//pause running activity
timer.cancel();
startBtn.setText(getString(R.string.homeStartBtn));
isActivityRunning = false;
} else {
reScheduleTimer();
startBtn.setText(getString(R.string.homePauseBtn));
isActivityRunning = true;
}
}
});
stopBtn = (Button)findViewById(R.id.stopBtn);
stopBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
timer.cancel();
passedSenconds = 0;
labelTimer.setText("00 : 00 : 00");
startBtn.setText(getString(R.string.homeStartBtn));
isActivityRunning = false;
}
});
}
public void reScheduleTimer(){
timer = new Timer();
timerTask = new myTimerTask();
timer.schedule(timerTask, 0, 1000);
}
private class myTimerTask extends TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
passedSenconds++;
updateLabel.sendEmptyMessage(0);
}
}
private Handler updateLabel = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
//super.handleMessage(msg);
int seconds = passedSenconds % 60;
int minutes = (passedSenconds / 60) % 60;
int hours = (passedSenconds / 3600);
labelTimer.setText(String.format("%02d : %02d : %02d", hours, minutes, seconds));
}
};
public void switchTabInActivity(int indexTabToSwitchTo){
MainActivity parentActivity;
parentActivity = (MainActivity) this.getParent();
parentActivity.switchTab(indexTabToSwitchTo);
}
}
Verwenden Sie stattdessen TextSwitcher
(für Nice-Textübergangsanimation) und den Timer.
Es wäre besser, wenn Sie gerade eine AsyncTask verwenden, die mit einem Timer läuft, etwa so
Timer LAIATT = new Timer();
TimerTask LAIATTT = new TimerTask()
{
@Override
public void run()
{
LoadAccountInformationAsyncTask LAIAT = new LoadAccountInformationAsyncTask();
LAIAT.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
};
LAIATT.schedule(LAIATTT, 0, 1000);
Sie können auch TimerTask
dafür verwenden.
Hier ist eine Methode
private void setTimerTask() {
long delay = 3000;
long periodToRepeat = 60 * 1000; /* 1 mint */
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// do your stuff here.
}
});
}
}, 3000, 3000);
}
Dieser Kodex funktioniert für mich ..
//Get Time and Date
private String getTimeMethod(String formate)
{
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat(formate);
String formattedDate= dateFormat.format(date);
return formattedDate;
}
//this method is used to refresh Time every Second
private void refreshTime() //Call this method to refresh time
{
new Timer().schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
txtV_Time.setText(getTimeMethod("hh:mm:ss a")); //hours,Min and Second with am/pm
txtV_Date.setText(getTimeMethod("dd-MMM-yy")); //You have to pass your DateFormate in getTimeMethod()
};
});
}
}, 0, 1000);//1000 is a Refreshing Time (1second)
}