In den meisten aktuellen Android-Apps werden kaum noch mehrere Activites verwendet sondern lediglich eine Activity mit einigen verschiedenen Fragments gekoppelt.
Das hat einige Vorteile, so gibt es den Entwicklern zum Beispiel die Möglichkeit bessere Apps für unterschiedliche Display-Größen zu bauen.

Gleichzeitig ist aber auch der Floating Action Button eine Art Standard-Eingabemethode für Android geworden. Dieser ist aber oft ein Bestandteil der MainActivity und kann so nicht direkt eine Methode im aktuell durch die Activity gehosteten Fragment triggern.

Hier will ich euch heute eine Möglichkeit zeigen, wie ihr den Klick auf den Floating Action Button an euer aktuell angezeigtes Fragment weitergeben könnt.

Erstellen eines Interfaces

Beginnen wir damit, dass wir in unserer Activity, die die verschiedenen Fragments hostet ein neues Interface erstellen, das eine Methode mit dem Namen „onFabClick“ besitzt.
Das könnte zum Beispiel wie folgt aussehen:

interface FabClickListener {
fun onFabClicked()
}

Dieses Interface implementieren wir nun in allen Fragments, die von unserer Activity gehostet werden.

class SomeFragment : Fragment(), ParentActivity.FabClickListener

Aktuelles Fragment speichern

Dann erstellen wir in der Activity eine globale Variable mit dem Typ des Interfaces, ich nenne es jetzt einfach Mal „fabInterface“.
Unter Kotlin müssen wir die Variable natürlich noch lateinit machen, damit wir sie erstmal null lassen können.

private lateinit var fabClickListener: FabClickListener

Nun speichern wir in der onStart oder wo auch immer ihr eure Fragments initialisiert und anzeigt das aktuell gehostete Fragment in die Variable

fabClickListener = someFragment

Diese aktualisieren wir nun auch bei jedem Aufruf eines anderen Fragments mit dem aufgerufenen Fragment.

Ist dies erledigt können wir dazu übergehen in der oncreate Methode der Parent Activity einen onClickListener für unseren FAB zu erstellen.
In diesem rufen wir dann zugleich die Methode „onFabClick“ auf unserer oben initialisierten Interface-Instanz, also dem aktuell angezeigten Fragment auf.

ourFab.setOnClickListener {
    fabClickListener.onFabClicked()
}

Hierdurch wird die onFabClick-Methode in dem jeweils aktuell gehosteten Fragment aufgerufen.
In dieser können wir nun den je nach Fragment passenden Code für den FAB aufrufen und schon haben wir den Klick auf den FAB an das aktuelle Fragment weitergeleitet.

override fun onFabClicked() {
    //Do here what you wann do in the fragment
}