Allgemeines Verständnisproblem eines absoluten Noobs..

  • 4 Antworten
  • Letztes Antwortdatum
M

MegaMem

Neues Mitglied
0
Hallo Leute,
ich bin komplett neu in Sachen App-Programmierung unterwegs und nach wenigen Minuten bereits auf eine Verständnisproblem gestoßen, welches sich leider auch nach mehrtägigem Googeln nicht lösen ließ...

Ich habe mit Android Studio eine neue Fragment-App erstellt.
Erstellen und deguggen auf einem Samsung Galaxy Tab läuft ohne Probleme - prima!

Ich habe über die Funktionen im Android Studio ein neues Fragment hinzugefügt und wechsle testweise in der onCreate-Funktion der MainActivity zurm neuen Fragement:


@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
..
setContentView(R.layout.fragment_new);
..

Klappt auch alles: Keine Fehlermeldung, Anwendung ausführbar.


Was mich jetzt verwirrt:

Zu jedem Fragment wird ja automatisch eine Klasse angelegt, in der bereits wichtige Funktionen wie onCreate etc. des Fragments überladen werden. Wenn ich diese versuche zu füllen passiert gar nichts. Setze ich Breakpoints in diese Funktionen und debugge, passiert auch nichts: Die Funktionen werden anscheinend nicht aufgerufen.

Nicht einmal onCreateView scheint benutzt zu werden. Wenn ich

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_new, container, false);
}

in

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Inflate the layout for this fragment
return inflater.inflate(R.layout.irgend_ein_anderes_fragment, container, false);
}

ändere, erscheint trotzdem fragment_new - selbst wenn ich die Zeile komplett auskommentiere.



Irgendwas grundsätzliches scheine ich übersehen zu haben - aber was?

Vielen Dank im Voraus,
Matthias
 
Wenn Du in der Activity (im onCreate()) ein Layout setzt (setConentView()), wird dieses gerendert.
Da gibt es dann erstmal keine Fragmente. Erst wenn in diesem Layout ein Fragment referenziert wird, wird dieses geladen, da wird dann ein Fragment instantiiert und darin onCreateView() gestartet und so weiter.

Man kan ohne Probleme Activites ohne irgendwelche Fragmente benutzen. (Was du offenbar aus versehen tust, indem du ein Layout in der Activity definierst, das gar keine Fragmente referenziert)
 
Danke für die superschnelle Antwort!

Ich bin mir aber nicht sicher, ob ich sie richtig verstanden habe..

Aktuell wird das Fragment dargestellt und ist voll funktionstüchtig - ein in der .xml Datei des Fragments probeweise angelegter Button

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_safeConfig"
android:id="@+id/button_saveConfig"
android:layout_gravity="center_horizontal"
android:onClick="ButtonOnClick"

funktioniert und ruft brav seine Eventbehandlungsroutine auf - aber das Fragment an sich muss ich erst noch irgendwo referenzieren, bevor seine onXXX-Funktionen aufgerufen werden?


ok...

Ich habe gerade mal das Fragment mittels <fragment> tag in der activity_main.xml eingebunden.
Klasse, jetzt werden die onXXX-Funktionen aufgerufen!

Allerdings habe ich jetzt ein anderes Problem: Wie bekomme ich mehrere Fragments ans rennen, die ich der Reihe nach aufrufen kann? Wenn ich alle in die activity_main.xml setze werden sie ja gleichzeitig dargestellt...


Grüße,
Matthias
 
MegaMem schrieb:
aber das Fragment an sich muss ich erst noch irgendwo referenzieren, bevor seine onXXX-Funktionen aufgerufen werden?

Im Prinzip ja, das macht im einfachsten Fall das Layout der Activity.

Allerdings habe ich jetzt ein anderes Problem: Wie bekomme ich mehrere Fragments ans rennen, die ich der Reihe nach aufrufen kann?

Durch eine FragmentTransaction. Beispiel: Android Fragment transaction: FragmentManager and Backstack
 
Klasse, das probiere ich direkt heute Abend mal aus.

Tausend Dank!

Matthias
 
Zurück
Oben Unten