android tutorial Modo semplice per aggiornare periodicamente il widget TextView




android textedit imeoptions (3)

Ho un widget con due TextView che mostra l'ora e la data.

Voglio semplicemente che questo batch di codice si verifichi ogni secondo:

views.setOnClickPendingIntent(R.id.rl, pendingIntent);
java.util.Date noteTS = Calendar.getInstance().getTime();
String time = "kk:mm";
String date = "dd MMMMM yyyy";

views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS));
views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS));

Quindi ho bisogno di un modo semplice per aggiornare periodicamente TextView nel widget in modo che l'ora cambi più di 30 minuti standard. Grazie


Un'altra possibilità sarebbe l'uso delle classi Timer e TimerTask . È possibile utilizzare il Timer.schedule(TimerTask task, long delay, long period) per ottenere ciò che è necessario.

Tieni presente che non puoi accedere al thread dell'interfaccia utente da un TimerTask, quindi il metodo Handler.postDelayed() potrebbe essere una soluzione migliore se hai già intenzione di utilizzare un Handler con la classe Timer . Esistono altri metodi per accedere al thread dell'interfaccia utente con un TimerTask , ad esempio Activity.runOnUiThread() .



è possibile creare Handler e Runnable , quindi consentire al Handler di riavviare il Runnable all'intervallo specificato. il tuo programma potrebbe assomigliare a questo:

private Handler mHandler = new Handler();

@Override
public void onResume() {
    super.onResume();
    mHandler.removeCallbacks(mUpdateClockTask);
    mHandler.postDelayed(mUpdateCLockTask, 100);
}

@Override
public void onPause() {
    super.onPause();
    mHandler.removeCallbacks(mUpdateClockTask);
}

private Runnable mUpdateClockTask = new Runnable() {
    public void run() {
        updateClock();
        mHandler.postDelayed(mUpdateClockTask, 1000);
    }
};

e all'interno di updateClock() tutti gli aggiornamenti dell'interfaccia utente. Suppongo che tutto ciò avvenga all'interno Activity con le onPause()/onResume() appropriate.





textview