Ich versuche Textview in Android zu erstellen, die die verbleibende Zeit (Sekunden) anzeigen.runOnUiThread funktioniert nicht richtig
Haben Sie runOnUiThread und Hadnler dafür verwendet und alles scheint gut zu funktionieren (Sysout und Debug zeigt, dass beide Threads ausgeführt werden und Wert ordnungsgemäß aktualisiert wird). Auf der Benutzeroberfläche wird der Textansichtswert jedoch nicht ordnungsgemäß aktualisiert. Wenn der Thread fertig ist, wird er mit dem letzten Wert aktualisiert.
Ich schreibe den folgenden Code in private Methode des Fragments.
final TextView timerText = (Textansicht) mainView.findViewById (R.id.timerText); timerText.setText (R.string.maxAllowedSeconds);
Durch viele der vorherigen Fragen in diesem Bereich gegangen, aber keine scheint konkrete Lösungen für dieses Problem zu haben.
Vielen Dank im Voraus.
SOLUTOIN:
Schließlich habe ich AsynchTask, die perfekt funktioniert wie erwartet.
private class RapidFireAsyncTimerTask extends AsyncTask<Integer, Integer, Void> {
private Context context;
private View rootView;
public RapidFireAsyncTimerTask(Context ctx, View rootView) {
this.context = ctx;
this.rootView = rootView;
}
@Override
protected Void doInBackground(Integer... params) {
int maxSec= params[0];
while (true) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(--maxSec);
if (maxSec <= 0)
break;
}
return null;
}
@Override
protected void onProgressUpdate(final Integer... values) {
((TextView) rootView.findViewById(R.id.timerText)).setText("" + values[0]);
}
@Override
protected void onPostExecute(Void aVoid) {
//next task
}
}