Wie übergeben Sie Variablen aus dem thread an die Umgebung?
Ich habe einen Thread in der verschachtelten Haupttätigkeit:
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
new Thread(new Runnable(){
public void run() {
int myInt = 1;
//Code below works fine and shows me myInt
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(myInt);
}
}).start();
//Code below doesn't work at all
TextView textView = (TextView) findViewById(R.id.text_view);
textView.setText(myInt);
}
Ich bin mir nicht sicher, ob diese Struktur ist korrekt. Wie sollte ich den pass myInt variable der MainActivity
so wird es erkennbar und bedienbar außerhalb des Threads?
- Hf ist der beste Weg. Hier ist die gute Artikel über it vogella.com/articles/AndroidPerformance/article.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie zuerst wollen Sie eine Globale variable für die ganze Zahl, die bereits festgelegt ist, bevor Sie versuchen, die Einstellung der textview außerhalb der thread (auf dem Haupt-thread). Es muss vorher festgelegt sein, da die neuen thread beginnen Sie wird einfach gestartet werden und entlang bewegen, um den nächsten code-Zeilen, so myInt nicht gesetzt wurden, noch.
Verwenden Sie dann die VORGEGEBENE Globale integer-Wert für die textview auf dem Haupt-thread, zumindest anfänglich. Wenn Sie möchten, um es zu ändern aus in dem Thema, das Sie begonnen haben, dann erstellen Sie eine Methode in Ihrer Klasse wie setIntValue (), die übergeben wird, in der die ganze Zahl aus dem thread und legen Sie die Globale variable auf den Wert. Kann ich das update mit dem code-Beispiele, die später, wenn Sie möchten.
UPDATE: Beispiel-code
Hinweis: Wenn Sie nur wollen, um in der Lage sein, um einen reset der textview, als Gegensatz zu einem globalen, bedienbar variable, würde ich vorschlagen, das ändern der Methode nur pass in die neue ganze Zahl und setzen Sie den textview, anstatt speichern Sie eine Globale variable, so:
Wenn Sie die oben genannten, stellen Sie sicher, dass beim Aufruf der Methode aus dem thread, rufen Sie es über den UI-thread in etwa so:
runOnUiThread(new Runnable()){
public void run(){
//update UI-Elemente
}
}
textView.setText()
innerhalb dersetMyInt(value)
ich bekomme nichts ... Wenn ichLog.d("myAlert",String.valueOf(value));
funktioniert perfekt! Ich sehe den richtigen Wert in der Konsole. Irgendwelche Gedanken, warum?ändern
textView.setText(myIntValue)
stürzt die app und es ist appropriateto verwendentextView.setText(String.valueOf(myIntValue))
Versuchen Sie Folgendes: