Post Detail

Post #142

Kotlin Fragments

Notes Fragments

  • Un Fragment = un morceau d’interface GUI
  • Il dispose de son layout et son fonctionnement
  • Un Fragment peut être statique → il reste dans la GUI
  • un fragment peut être dynamique → il peut être ajouté / enlevé de l’interface

Les fragments offrent beaucoup de possiblilités d’agencement d’interface GUI et combinés avec les quantificateurs (land, w600do, …)


Steps

  1. Création d’un nouveau projet DemoFragment (EmptyActivity)
    • onCreateView() → retourne le layout du fragment
    • companion object → obligatoire pour définir la méthode newInstance() laquelle permettra e créer de nouveaux fragments en cours d’exécution de l’application
 1class MainFragment : Fragment() {
 2
 3    /// onCreateView() doit toujours être présente --> Le Fragment acquiert son layout
 4    override fun onCreateView(
 5        inflater: LayoutInflater, container: ViewGroup?,
 6        savedInstanceState: Bundle?
 7    ): View? { /// On retourne un composant View
 8        // Inflate the layout for this fragment
 9        return inflater.inflate(R.layout.fragment_main, container, false)
10    }
11
12    /// Obligatoire grâce à lui on définit la méthode newInstance()
13    companion object {
14        fun newInstance() : MainFragment {
15            return MainFragment()
16        }
17    }
18}

Fragment Statique

Fragment statique est associé automatiquement à un tag <fragment> dans le layout de l’activité.

→ main_fragment.xml
→ activity_main.xml (cible pour le fragment)

Dans activity_main on définit le tag <fragment> pour y placer un fragment statique :

1<fragment
2    xmlns:android="http://schemas.android.com/apk/res/android"
3    android:layout_width="match_parent"
4    android:layout_height="match_parent"
5    android:name="ch.ceff.android.demofragments.fragment.MainFragment"
6    android:id="@+id/TODO"
7    />

Ajout d’une seconde Activity avec un second Fragment

  • Avec un clic sur le bouton on veut passerr de MainActivity à DetailActivity → problème: le bouton se trouve dans le Fragment MainFragment !!! → le Fragment ne peut pas demander le changement d’Activity

  • Dialogue: Fragment → Activity !!! → mise en place d’une interface pour dialoguer

  • L’interface est définie dans MainFragment.

→ Pour développer un layout spécial tablette, il faut pouvoir créer des Fragments de manière dynamique.
→ Stop utiliser <fragment> et les remplacer par des <FrameLayout>

1<?xml version="1.0" encoding="utf-8"?>
2<FrameLayout
3    xmlns:android="http://schemas.android.com/apk/res/android"
4    android:layout_width="match_parent"
5    android:layout_height="match_parent"
6    android:id="@+id/frame_layout_main" />
1<?xml version="1.0" encoding="utf-8"?>
2<FrameLayout
3    xmlns:android="http://schemas.android.com/apk/res/android"
4    android:id="@+id/frame_layout_detail"
5    android:layout_width="match_parent"
6    android:layout_height="match_parent" />