Automatische Textänderung durch While-Schleife

  • 23 Antworten
  • Letztes Antwortdatum
K

kingfatih58

Neues Mitglied
0
Hallo,
ich habe mal ne frage. Wie kann ich es so machen, dass z.B. alle 3 sekunden mein Text vom textView sich verändert. Dabei sollen bestimmte Texte vom strings.xml erscheinen. Das ganze müsste doch durch eine While schleife klappen oder nicht?
Liebe Grüße
 
Ja in einem Thread natürlich
 
ich habe es mit einem Timer versucht. Hier mein quellcode
Code:
public class MainActivity extends ActionBarActivity {
    Button button;
    TextView hTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        hTextView = (TextView) findViewById(R.id.textView);
        MyTimerTask myTask = new MyTimerTask();
        Timer myTimer = new Timer();

        myTimer.schedule(myTask, 3000, 1500);

    }

        class MyTimerTask extends TimerTask {
            public void run() {
                // ERROR
                hTextView.setText("text1");
                hTextView.setText("text2");
                hTextView.setText("text3");
                hTextView.setText("text4");
              

                System.out.println("");
            }
        }

hierbei stürzt die app aber ab
 
du hast eine innere Klasse wenn du auf einen member der äußeren Klasse zugreifen willst musst du das mit dem Klassennamen machen. Sieht zwar aus als ob du auf eine statischen Member zugreifst aber dem ist nicht so.

MainActivity.hTextView.setText("text1");

aber auch hier vorsichtig. Auf manche Sachen kann man nciht aus einem nciht UI Thread zugreifen. Während bei TextView.setText() sowas noch geht wirst du vom System bei bestimmten MEthoden eines Adapter zum Beispiel auf die Finger kriegen
 
So klappt es auch nicht. Es kommt immer eine Fehlermeldung:
orrtf27i.png

[doublepost=1447800035,1447798497][/doublepost]wie soll ich es denn jetzt machen?
 
Dann habe ich wohl mist erzählt sorry

MainActivity.this.hTextView.setText("text1");

?
 
Okay hast du denn eine Lösung?
 
ja obere aber ich glaube es sollte eigentlich auch so mit htextView gehen....was istz denn der Error?
[doublepost=1447800726,1447800453][/doublepost]ich nahm an du kriegst einen compiler eroor falls es ein laufzeitfehler ist dann setze den Text auf dem UI Thread(runOnUiThread())...Ich hatte fest in Errinerung dass setText auch außerhalb vom UIThread gesetzt werden kann eigentlich....
 
Da setText() ja auch zum erneuten layout/draw führt, kann es schon sein, dass es im UIThread ausgeführt werden muss. Ich bin mir da aber auch nicht so sicher

Einfach, wie @Jaiel schon gesagt hat mit runOnUiThread() oder TextView.post() versuchen

MfG Niko
 
also ich habe es mit TextView.post() versucht. Ich verstehe es nicht ich habe es jetzt so versucht aber es ist komplett falsch:
Code:
 class MyTimerTask extends TimerTask {
        public void run() {
        hTextView.post(new Runnable() {

                           hTextView.setText("text1");

                      





            System.out.println("");
       
    }
    }
    }
 
versuchs mal mit

Java:
runOnUiThread(newRunnable(){
    @Override
    publicvoid run(){
        hTextView.setText("text1");
    }
});
 
Okay habe ich. Jetzt kommt so ein fehler. Habe ich es falsch eingetragen?
f9oexvmq.png
 
"newRunnable" mal auseinander schreiben? ^^
 
ohh sry dummer fehler... Aber auch so bleiben die Probleme bestehen:
8cgjob9g.png
 
MainActivity.this.runOnUiThread(....
oder getBaseContext().runOnUiThread(...
oder getContext().runOnUiThread....

habs nicht im Kopf einfach mal ein paar von diesen probieren...

Ich programmier unter Andrid meist immer noch im Try and Error Modus ^^
[doublepost=1447806998,1447806679][/doublepost]warum machst du denn nicht einfach mal:

Java:
public class MainActivity extends ActionBarActivity {
    Button button;
    TextView hTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        hTextView = (TextView) findViewById(R.id.textView);

       new Thread() {
            public void run() {
               while(//boolean einfügen){
                   try
                   {
                      hTextView.setText("text1");
                      hTextView.setText("text2");
                      hTextView.setText("text3");
                      hTextView.setText("text4");
                      sleep(3000);
                   }
                   catch(InterruptedException e)
                   {
                      break;
                   }
                  catch (Throwable t)
                  {
                     break;
                  }
                }
            }
        }.start();
    }

sollte eigentlich klappen mit setText ausserhalb des UIThread ansosnten wieder mal mit runOnUiThread versuchen!
 
hatte ich auch schon. Das problem hierbei ist das er die Texte nicht nacheinander geht sondern einfach bei text4 bleibt ohne davor Text 1-3 durch zugehen
 
Wie jetzt? Was erwartest du denn wenn du 4 Anweisungen hintereinander hast die den Text einer einzigen View hintereinanderweg ändern?
 
Code:
 hTextView.setText("text1");
sleep(3000);
hTextView.setText("text2");
sleep(3000);
hTextView.setText("text3");
sleep(3000);
hTextView.setText("text4");
sleep(3000);

So?
 
ja denk ich mal...
 
Hallo,
der Ansatz mit den Timer und runOnUiThread war fast richtig. versuche es mit folgenden Code:
Code:
class MyTimerTask extends TimerTask {
        public void run() {

            runOnUiThread(new Runnable(){
                @Override
                public void run(){
                    hTextView.setText("text1");
                }
            });



            System.out.println("");
        }
    }

Er müsste funktionieren.
 

Ähnliche Themen

G
Antworten
1
Aufrufe
384
Gerdchen07
G
Zurück
Oben Unten