studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android date time textview clock

para - manual de programacion android pdf



Actualizar TextView cada segundo (8)

Agregue el siguiente código en su método onCreate ():

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();

Este código inicia un hilo que duerme 1000 milisegundos por ronda.

He mirado alrededor y parece que nada funciona según lo que he intentado hasta ahora ...

@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));

Básicamente quiero que los métodos de setText se actualicen o actualicen cada segundo, para que mi reloj realmente funcione como debería. He visto métodos como controladores y ejecución y nada funcionó, así que cualquier ayuda con esto sería genial, gracias. :)


Es una pregunta muy antigua y estoy seguro de que hay muchos recursos por ahí. Pero nunca es demasiado difundir la palabra para estar en el lado seguro. Actualmente, si alguna otra persona quiere lograr lo que OP pidió, puede usar: android.widget.TextClock .

La documentación de TextClock here .

Esto es lo que he usado:

<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" />


Extendiendo la respuesta de @endian, podría usar un hilo y llamar a un método para actualizar el TextView. A continuación hay un código que inventé en el momento.

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)); }


Puede usar el temporizador en lugar del hilo. Esto es todo mi código

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); } }


Sería mejor si usaras una AsyncTask corriendo usando un temporizador como este

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);


Si desea mostrar el tiempo en la vista de texto, mejor utilice Chronometer o here

Usando Chronometer : Esto fue agregado en API 1. Tiene muchas opciones para personalizarlo.

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();

Usando TestClock : Este widget se presenta en el nivel API 17. Personalmente me gusta el cronómetro.

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" />

Eso es todo, has terminado.

Puedes usar cualquiera de estos dos artilugios. Esto hará que tu vida sea más fácil.


También puede usar TimerTask para eso.

Aquí hay un método

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); }


Use TextSwitcher (para una agradable animación de transición de texto) y el temporizador en su lugar.