TextView lässt sich auch im Main-Thread nicht IMMER ändern

  • Hallo zusammen,


    bei mir kristallisiert sich allmälich ein neues "Problem" heraus


    Ich habe folgende Activity:



    Dabei wird die Methode newMessage von einem anderen Objekt regelmäßig aufgerufen, sodass auch die Runnable updateUI regelmäßig ausgeführt wird, mit der ich den Text einer TextView ändern möchte.


    Wenn ich das Ganze mit einem Breakpoint in der entsprechenden Zeile debugge, kommt es zu folgendem, seltsamen Verhalten:


    - Ich sehe, dass die Zeile wie gewünscht angesprungen wird.
    - Bei der ersten Ausführung vom setText() passiert grundsätzlich nie etwas.
    - Resume ich nun das Debuggen mehrmals, wird "irgendwann" - also nachdem der Breakpoint x-mal angesprungen wurde - der Text endlich gesetzt, mal beim 2. Mal, mal aber auch erst beim 10. Mal...
    - Ausgeführt wird das Ganze aber nach meinem Verständnis immer wie geplant im Main-Thread:


    Thread [<1> main] (Suspended (breakpoint at line 32 in SitzkisteActivity$1))
    MyActivity$1.run() line: 32
    ...


    Ist das jetzt eine nicht zu erklärende Merkwürdigkeit, oder sehe ich nur einen offensichtlichen Fehler nicht?


    Danke und Grüße,
    FargoTof

  • Danke der Nachfrage ;)... Das ist ja das Seltsame:


    - Ich erzeuge mir in der onCreate() als erstes beim Aufruf von setContentView(R.layout.main); den TextView. Erst dannach instanziere ich die Klasse, die dann die irgendwann newMessage() aufruft.


    - Innerhalb der onCreate() - und auch noch innerhalb der onStart() - kann ich noch problemlos auf die TextView zugreifen und z.B. den Text ändern. Ab da wird es dann komisch.


    Ich kann es jetzt grade nicht nachprüfen, aber ist ggf. auch ein unterschiedliches Verhalten zwischen debug und run denkbar?


    Grüße,
    FargoTof

  • Klingt für mich eigentlich eher nach einem Contextproblem,
    obendrein definierst du deinen Textview 2x


    einmal Lokal (in run) und einmal Global, muss also schief gehen.


    Code
    private Runnable updateUI = new Runnable(){         public void run(){             final TextView myTextView = (TextView)findViewById(R.id.myView);             myTextView.setText("updateUI called"); // ################# BREAKPOINT ###############         }     };


    Das findeView funktioniert ja nur im Hauptthread weil es ja eigentlich


    this.find ... blabla heisst


    Wenn du deinen Textview mal Global in deiner Klasse definierst und dann mal
    den Zugriff darauf testest sollte es gehen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!