我想創建一個類似的「欄進度」,但帶有文本。我想這樣做,但不行。更改TextView兩次
public void changeTextTwice(View v) throws InterruptedException {
miEdad.setText("example 1");
Thread.sleep(2000);
miEdad.setText("example 2");
}
只顯示最後一個setText。我該怎麼做?
謝謝^^
我想創建一個類似的「欄進度」,但帶有文本。我想這樣做,但不行。更改TextView兩次
public void changeTextTwice(View v) throws InterruptedException {
miEdad.setText("example 1");
Thread.sleep(2000);
miEdad.setText("example 2");
}
只顯示最後一個setText。我該怎麼做?
謝謝^^
可以使用android.os.Handler與延遲執行作業。
public void changeTextTwice(View v){
miEdad.setText("example 1");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
miEdad.setText("example 2");
}
});
}
},2000);
}
否則,如果你想要做的事的下載等,你可以使用的AsyncTask這樣
private class DownloadAsync extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
super.onPreExecute();
miEdad.setText("example 1");
}
@Override
protected Void doInBackground(Void... params) {
// do your job here
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
miEdad.setText("example 2");
}
}
,並調用它在你的方法是這樣
new DownloadAsync().execute();
注意,如果你想調用UI方法,如setText()
等在doInBackground()
你必須使用runOnUiThread(new Runnable)
像這樣
runOnUiThread(new Runnable() {
@Override
public void run() {
// call ui methods here
}
});
你的方法被稱爲如此之快,你的眼睛永遠不會看到第一個setText。你只會看到最後一個。
根據您想要顯示的進度,有不同的解決方案。如果您想顯示正在下載的文件的進度,請查看AsyncTask。有幾個很棒的教程:https://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/
非常感謝你@vspallas,但run()方法可以使用條件嗎?因爲你嘗試類似的東西而不工作。裏面的run()我稱之爲「pensar()」,有這個
public void responde() {
if (respuestasPersonalizas = false) {
if (sino == 1) {
respuesta.setText(R.string.yes);
} else if (sino == 2) {
respuesta.setText(R.string.no);
} else {
respuesta.setText(R.string.dontknow);
}
sino = 0;
}
}
你可以發佈日誌嗎? –
當然,我把波紋管^^ –
但該應用程序不接近,只是不工作:/ –
必須呼籲runOnUiThread –
的方法,你可以幫我嗎? ^^ –
你想要什麼? –