setText() Methode funktioniert nicht, keine Fehlermeldung

  • Antworten:8
Xilef Bo
  • Forum-Beiträge: 12

26.07.2020, 16:16:42 via Website

Hallo,
ich benötige eure Hilfe. Bei meinem Projekt soll ein Double wert von einem Fragment zu einem weiteren Fragment übergeben werden und anschließend in einem TextView ausgegeben werden. Das übertragen klappt auch. Ebenso wie eine Ausgabe eines beliebigen Strings in dem TextView. Jedoch wird nichts ausgeben, wenn der besaget Wert ausgeben werden soll. Im Gegensatz zu der Konsole dort wird alles perfekt ausgegeben. Ich bin absolut ratlos und kann mir das nicht erklären. Fehlermeldungen gibt es auch keine.
Das ist mein Code:

@Override
public void onStart() {
    super.onStart();
  //ausgabe ist der besagte TextView
    ausgabe.setText("ausgabe");

// das war jetzt nur der Test, ob der TextView grundsätzlich richtig angelegt ist und er funktioniert
double textValue = 0.0;
Bundle args = getArguments();
if (args != null) {
textValue = args.getDouble("key");
System.out.println(textValue);
String temp = Double.toString(textValue);
System.out.println("temp"+temp);
ausgabe.setText("temp+"+temp);

    }
}

Ich würde mich sehr über eure Hilfe freuen.
Gruß Felix

Kommentieren
Jokel
  • Forum-Beiträge: 1.527

26.07.2020, 17:03:35 via Website

Hallo bevor du die Variablen Textview ausgabe mit setText setzen kannst musst du auch erstmal ihre id suchen.
Mit findviewbyId. Im layout wirst du sie hoffentlich auch definiert haben.

Hilfreich?
Kommentieren
Xilef Bo
  • Forum-Beiträge: 12

26.07.2020, 18:26:46 via Website

Vielen Dank für die schnelle Antwort. Den TextView habe ich in der onCreate() Methode definiert und die Ausgabe eines beliebigen Strings funktioniert ja auch in der onStart() Methode. Das habe ich als erstes ausgeschlossen. Theoretisch müsste alles funktionieren, nur praktisch wird mir der übertragene double Wert (welchen ich danach in einen String für das Textfeld umwandele) nicht ausgegeben. Und eine Fehlermeldung, der ich nach gehen könnte bekomme ich auch nicht. Die Zeile ausgab.setText(„temp“+temp); wird einfach übergangen und es passiert nichts.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

26.07.2020, 19:06:23 via Website

Wieso machst du das in der onStart.

Hast du wirklich dasBundle in der Methode?
Was wird den in dem textview ausgegeben?

Hilfreich?
Kommentieren
Xilef Bo
  • Forum-Beiträge: 12

26.07.2020, 20:35:52 via Website

Also ich werde meine gesamte Struktur mal genauer erläutern. Ich habe eine Tabbed Activity mit zwei Seiten für jede ein eigenes Fragment. Auf beiden sollen thermodynamische Formeln angewandt werden. Auf Seite 1 ist dann ein Knopf welcher dafür sorgt, dass das Ergebnis von Seite 1auf Seite 2 übertragen wird damit dort weitergerechnet werden kann. Der Tab wird ebenfalls mit diesem Knopfdruck gewechselt. Nun soll beim erscheinen des anderen Fragments (onStart() Methode) der Übertragene double Wert empfangen werden und dann erstmal in dem TextView ausgeben werden. Und daran scheitert es nun. Das Bundle rufe ich in der Methode auf und das Übertragen funktionier auch prima. Nur die Ausgabe in dem Textfeld eben nicht.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

26.07.2020, 20:51:22 via Website

Dann zeige doch mal wie du die id, Instanz deiner textview holst.

Wo und wie ist deine Variable "ausgabe" Definiert? (local, Klassenvariable im KlassenRumpf)
Wo machst du das findViewByID ?

Zeige deinen Code so kommen wir nicht weiter.

— geändert am 27.07.2020, 07:33:33

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

27.07.2020, 06:08:24 via Website

Den TextView habe ich in der onCreate() Methode definiert

Da hast Du dein Problem.
Erstens wenn die dort mit Textview...
Definiert ist, ist sie eine lokale Variable die nur in der onCreate sichtbar ist.

Zweitens ist hier das Layout noch nicht geladen mit findviewbyId kann sie hier auch nicht gefunden werden.

Das Layout hast du erst in der onCreateView.
Und auch hier kannst du erst die Id suchen.

Was du willst und brauchst ist eine Klassen Variable und nicht local.

Zeile ausgab.setText(„temp“+temp); wird einfach übergangen und es passiert nichts.

Woher willst du das wissen? Das die übergangen wird.
Für eine Ausgabe in das log benutzt man auch Log und nicht System.out.println eine Konsole gibt es bei Android nicht.
Wird zwar von einigen compiler und Android Versionen in das Log übersetzt aber eben nicht immer.
Für sinnvolles debuggen benutze "Log".

Ausgaben auf die Konsole mit System.out werden nicht immer übersetzt für debuggin in android unbrauchbar.

Eine Frage habe ich noch. Wie mit was lädst du das Fragment. Ich hoffe das du das nicht mit dem Viewpager machst. Sondern selber mit einer Transaction..

— geändert am 27.07.2020, 07:57:35

Hilfreich?
Kommentieren
Xilef Bo
  • Forum-Beiträge: 12

27.07.2020, 17:29:50 via Website

Also nochmals vielen Dank für deine Hilfe. Ich habe das Problem jetzt anderweitig gelöst. Ich habe zur Datenübertragung eine interface implementiert. Die onStart() Methode und das Bundle wird daher nicht mehr benötigt und es gibt auch keine Probleme mehr mit dem TextView. Der Hinweise mit dem Log anstelle von System.out... war ebenfalls gut. Dennoch würde mich interessieren warum ich keinen ViewPager werdenden sollte (was ich gerade mache und es funktioniert super)?

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.527

27.07.2020, 17:49:12 via Website

Weil der Viewpager immer seine Nachbar Fragmente vorlädt . Beim sichtbar werden des Fragment wird nicht die onCreateView oder deine onStart aufgerufen. Sondern schon vorher wenn der Nachbar geladen wird. Sonst könntest du keinen Swipe machen den da sind immer beide Fragmente für kurze Zeit sichtbar. Das ist auch der Grund warum deine Textview mit den aktuellen Daten nicht angezeigt wurde . Da die Methode nicht beim Swipe aufgerufen wird . Prüfe das mit einem Log ob die Methode beim klick deines Button aufgerufen wird.

Leider hast du uns nicht von dir aus verraten das du den ViewPager benutzt. Dann hätten wir das schon früher sagen können. Code hast du auch nur wenig gepostet. So ist Hilfe immer schwer.

Warum es mit deinen Interface geht da solltest du nun selber drauf kommen.

Schaue dir die Eigenheiten des ViewPagers an.

PS. diese Zeile System.out.println("temp"+temp);
wurde bestimmt auch nicht beim Klick im LogCat ausgegeben. Da die ganze Methote nicht nach dem Klick aufgerufen wurde.

Ob so ein System.out auch zuverlässig Fuktioniert ist wie gesagt auch nicht sicher deshalb Log.

— geändert am 27.07.2020, 18:00:28

Hilfreich?
Xilef Bo
Kommentieren