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.
Vous devez vous connecter pour publier un commentaire.
Remplacer
avec
Vous avez besoin pour créer un Gestionnaire dans le thread d'INTERFACE utilisateur pour exécuter
tâches dans le thread de l'INTERFACE utilisateur.
Ce serait peut-être plus le long des lignes de ce que vous recherchez:
J'ai trouvé ceci pour être une bonne façon d'ajouter de temps de la vidéo
vue ne peut être affiché que sur le thread de l'INTERFACE utilisateur. vous devez démarrer l'exécutable à l'aide de ru
Veuillez vous assurer R. id.timeTextFieldl est une bonne id.
plus courte est:
mais la meilleure façon est d'utiliser de la Chaîne.format^