La mise à jour de l'INTERFACE utilisateur avec des Exécutables & postDelayed pas de travail avec l'app

J'ai regardé toutes les discussions et le fil que je peux trouver sur l'obtention de ce travail, mais il ne l'est pas. J'ai une simple minuterie que les mises à jour du mode texte (mTimeTextField dans l'exemple ci-dessous). Le mUpdateTimeTask exécuter la méthode est exécutée correctement (chaque seconde), mais l'INTERFACE utilisateur/champ de texte n'est pas mis à jour.

J'ai le code en se basant sur les infos trouvées ici:

http://android-developers.blogspot.com/2007/11/stitch-in-time.html
http://developer.android.com/resources/articles/timed-ui-updates.html

Voici le code:

package com.something.handlertest;
import com.something.handlertest.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Test extends Activity {
private Handler mHandler = new Handler(); 
private int labelNo    = 0;
private long currTime  = 0L;
private long mStartTime = 0L;
TextView mTimeTextField;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTimeTextField = (TextView)findViewById(R.id.timeTextFieldl);
Button startButton = (Button)findViewById(R.id.start_button);
startButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (mStartTime == 0L) {
mStartTime = System.currentTimeMillis();
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.postDelayed(mUpdateTimeTask, 100);
}
}
});
}
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
final long start = mStartTime;
//long millis = SystemClock.uptimeMillis() - start;
long millis = SystemClock.uptimeMillis();
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds     = seconds % 60;
//setContentView(mTimeTextField);  This will blow up if I use it
if (seconds < 10) {
mTimeTextField.setText("" + minutes + ":0" + seconds);
} else {
mTimeTextField.setText("" + minutes + ":" + seconds);            
}
//mHandler.postAtTime(this,
//   start + (((minutes * 60) + seconds + 1) * 1000));
mHandler.postAtTime(this, 1000);
}
};
}

Par quelques suggestions, j'ai essayé d'ajouter:

setContentView(mTimeLabel);

Mais cela va se planter, se plaignent de la vue n'ayant pas de parent. Pour info, j'ai un:

setContentView(R.layout.main);

appel dans mon onCreate().

  • Avez-vous essayé runOnUiThread comme mentionné ici? stackoverflow.com/questions/3741458/...
  • Réglage contentView à un textview est certainement pas droit. Seul le réglage de l'affichage du contenu à une mise en sens, comme vous l'avez déjà fait onCreate.
InformationsquelleAutor bdelliott | 2010-09-21