J'ai passé quelques heures pour essayer de mettre à jour le texte dans la boîte de dialogue, mais a échoué. Lorsque l'option est cliquée, une nouvelle boîte de dialogue apparaît et dans la boîte de dialogue, il y a des textviews et un bouton, lorsque je clique sur le bouton, la textview sera mise à jour.Mise à jour Android TextView dialogue intérieur dans runOnUiThread
Voici le code lié au bouton d'écoute onClick:
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
for (int i = 0; i < 50 ; i ++){
final String currentNum = String.valueOf(i + 1);
Thread t = new Thread() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(currentNum); //it is fine
currentNum.setText(currentNum); //it is the problem, the setText only work when the for loop is finished.
}
});
}
};
t.start();
}
}
});
S'il vous plaît laissez-moi savoir si vous avez besoin de plus amples informations. Merci beaucoup d'avance!
// il est un OptionMenu
case R.id.action_refresh:
final TextView currentNum;
final ImageButton start;
String currentNum = Integer.toString(songList.size());
final Dialog lyricsAnalysis = new Dialog(this,R.style.cust_dialog);
lyricsAnalysis.requestWindowFeature(Window.FEATURE_NO_TITLE);
lyricsAnalysis.setContentView(R.layout.analysis);
lyricsAnalysis.setCancelable(true); //back button to cancel
lyricsAnalysis.setCanceledOnTouchOutside(true);
start = (ImageButton) lyricsAnalysis.findViewById(R.id.start);
//first value
currentNum.setText(String.valueOf(currentNum));
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
for (int i = 0; i < 50 ; i ++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
updateTextView(lyricsAnalysis,i);
}
}
});
lyricsAnalysis.show();
lyricsAnalysis.getWindow().setLayout(600, 1000);
break;
}
return super.onOptionsItemSelected(item); }
public void updateTextView(Dialog dialog, int i) {
final TextView currentNum = (TextView) dialog.findViewById(R.id.currentNum);
currentNum.setText(Stri`enter code here`ng.valueOf(i));
//return;
}
Pouvez-vous s'il vous plaît me dire le but de fil ayant dans la méthode onClick? – Srinivasan
quelle est l'utilisation du fil ici éviter cela. –
Comme si je n'avais pas le nouveau thread, le textView ne sera pas mis à jour à chaque fois. Et le mettra à jour quand la boucle for est terminée. Et tout ce que j'ai essayé est que, le System.out.println (currentNum) est bien, il imprime de 0 à 49, cependant, le setText ne fonctionnera que lorsque la boucle for est finie et changer le textView en (50) directement ... – andy