2016-08-09 56 views
0

Ich habe eine TextView Objekt in einer Aktivität (kein Fragment), die ich einen Text mit SetText() füllt. In einem bestimmten Zeitpunkt ändere ich die Sichtbarkeit des Objekts TextView in View.GONE. Nach einiger Zeit, wenn TextView Sichtbarkeit des Objekts auf View.VISIBLE festgelegt ist, wird der Textsatz dynamisch in TextView angezeigt. Ich habe versucht, zu verstehen, was passiert mit Log, und fand heraus, dass der Inhalt von TextView Objekt ist leere Zeichenfolge. Daher meine Frage, was passiert mit Text in TextView Objekt, wenn seine Sichtbarkeit auf View.GONE gesetzt ist?Was passiert mit Text im TextView-Objekt, wenn seine Sichtbarkeit auf View.GONE gesetzt ist?

Synopse:

Blindtext in TextviewsetText() mit -> Änderung Sichtbarkeit-View.GONE -> ändern Sichtbarkeit-View.VISIBLE ->getText()kehrt leer String

Frage: Warum?

+0

Sind Sie sicher, dass 'onCreateView()' nicht erneut aufgerufen wird? – Shaishav

+1

View.GONE sollte das nicht tun, es macht nur die Ansicht unsichtbar (und es nimmt keinen Platz). Können Sie den Code, in dem Sie die Textansicht verwenden, veröffentlichen? – cuoka

+0

Es war ein Anfängerfehler. Die Sichtbarkeit von TextView wurde aus der Sicht wegen anderer Elemente, die es überlappen, – tpk

Antwort

2

Die setVisibility() ist ein Verfahren der View Klasse und die docs sagt, dass, wenn die Sicht auf View.GONE gesetzt:

Diese Ansicht unsichtbar ist, und es braucht keinen Platz für das Layout Zwecke.

Daher ist die View Instanz (TextView Objekt hier) ist sehr lebendig und gedeiht und es gibt keinen Grund für seine private Felder (mText bei TextView) vernichtet werden. Es ist nur für den Layout-Manager unsichtbar. In Ihrem Fall ist einer der Schuldigen für das genannte Verhalten eine wahrscheinliche Neuinitialisierung des Objekts TextView (z. B. über einen Anruf an onCreateView()).

+0

Was ist mit View.INVISIBLE? In meiner Anwendung möchte ich etwas, das ich programmgesteuert manipulieren kann, aber es wird dem Benutzer nicht angezeigt. – Swarnveer

1

Die Textansicht ist unsichtbar und benötigt keinen Platz für Layout-Zwecke. So gibt es keinen Datenverlust, es ist nur unsichtbar ohne Platz für Layout-Zwecke zu erwerben. Es muss also eine andere setText() -Operation in Ihrem Code sein oder Sie können das TextView-Objekt neu erstellen.