ViewFlipper und gleiche IDs im Content

CSHW89

Bekanntes Mitglied
Hallo Leute,

ich habe ein kleines Problem mit dem ViewFlipper-Layout. Mein Hauptlayout sieht ungefär so aus:
Java:
<ViewFlipper
    android:id="@+id/flipper" >
    
    <include layout="@layout/content1" />
    <include layout="@layout/content2" />
    <include layout="@layout/content3" />
    <include layout="@layout/content4" />
    <include layout="@layout/content5" />
    
</ViewFlipper>
Die content-Layouts sehen alle sehr ähnlich aus, und besitzen manchmal (nicht alle) die beiden folgenden Items:
Java:
<LinearLayout
    ... >
    <TextView
        android:id="@+id/displayText"
        android:text="" >
    </TextView>
    <Button
        android:id="@+id/changeText"
        android:text="Verändern"
        android:onClick="onClickChangeText" />
</LinearLayout>
Die IDs 'displayText' und 'changeText' sind immer die gleichen, da ich den Code nicht unnötig aufblasen wollte, zumal ich später vielleicht neue content-Layouts hinzufügen möchte.
So nun habe ich in der Activity-Klasse folgende Methode:
Java:
public void onClickChangeText(View view) {
    displayText = (TextView) findViewById(R.id.displayText);
    displayText.setText("irgendwas");
}
Das Problem ist jetzt, dass 'findViewById' nicht das TextView findet, was gerade zu sehen ist. Es findet immer das erste View mit dieser ID auf content1, auch wenn z.b. content3 gerade im ViewFlipper aktiviert ist. Ich dachte der ViewFlipper verbirgt die Views komplett aus dem System. Hat jemand da eine Idee, wie ich das möglichst einfach umstellen kann, ohne Codeduplizierung? Oder hab ich da einfach nur was falsch gemacht?

Vielen Dank schon mal
lg Kevin
 

CSHW89

Bekanntes Mitglied
Nun ja, wie ich den Content auswähle, der zu sehen ist, wusste ich schon, aber danke. Die Sache ist, wenn ich mit "flipper.setDisplayedChild(3)" den 3. (bzw. 4.) Child auswähle, passiert folgendes. Der 1. Child z.b. ist auf dem Bildschirm nicht sichtbar, allerdings "sieht" ihn die Funktion "findViewById". Ich dachte eigentlich, der ViewFlipper würde die Childs nicht nur auf dem Bildschirm verbergen, sondern fürs komplette Systme.

lg Kevin
 
Zuletzt bearbeitet:

dzim

Top Contributor
Nein dass ist eben nicht so. Diese Art von Verhalten kenn' ich eigentlich nur vom ViewPager (für Tabs...), bei dem nur die Tabs links und rechts vom aktuellen tatsächlich direkt geladen werden.
Der ViewFlipper ist wohl relativ alt und ist eben auf statischen Inhalt ausgelegt. Daher müssen dort alle Views bereits geladen sein - und sind dementsprechend per #findViewById(int) immer auffindbar.
Vielleicht wäre es besser, wenn du auf die Adapter-basierte Variante umschwenkst. Dort wird der Content dynamisch anhand des Adapters (aus der DB oder sonstwoher) geladen. Allerdings weiss ich nicht wie viele Views er dann im voraus lädt, da müsstest du mal selbst recherchieren...

Gefunden habe ich dazu wieder mal etwas auf StackOverflow, nimm das vielleicht mal als Ausgang deiner Recherche. Und gib mir mal auch ein Feedback, was du raussfindest, denn mich würde das Thema an dieser Stelle auch interessieren!

android - ViewFlipper vs AdapterViewFlipper - Stack Overflow

Grüsse und ein schönes Osterfest!
 

CSHW89

Bekanntes Mitglied
Ich hatte jetzt bisher noch keine Möglichkeit es zu testen. Aber ich werde es mir mal ansehen. Vielen Dank!
Ja auf StackOverflow habe ich zuerst geguckt, habe aber zu diesem speziellen Problem nichts gefunden gehabt. Habe wohl mit falschen Stichpunkten gesucht ^^.

lg Kevin
 

dzim

Top Contributor
Ich habe erst nach "ViewPager" und dann nach "ViewPager adapter" gesucht, da war es dann schnell gefunden :-D
 

Ähnliche Java Themen

Neue Themen


Oben