06/02/2021 06/02/2021
Modularité
Les fragments introduisent la modularité et la réutilisabilité.
Introduction au fragment les fragments sont mieux adaptés pour définir et gérer
l'interface utilisateur d'un seul écran ou d'une partie d'écran.
Les activités sont un endroit idéal pour placer des éléments
ZEMALI Elamine globaux autour de l'interface utilisateur de votre application,
comme barre de navigation
Exemple: une application qui répond à différentes tailles
d'écran.
Comprendre le paradigme de
conception des fragments Modularité
Qu'est ce qu'un fragment ?
Une partie de l’interface utilisateur modulaire et flexible.
Introduits en premier dans l'API Android 3.0 (Honeycomb).
Les fragments sont gérés par une activité.
Il peut y avoir plus d'un fragment dans une activité.
le fragment définit sa propre disposition de vue.
Activity A Activity A
Activity B
1 2
06/02/2021 06/02/2021
CYCLE DE LA VIE Ajouter des fragments
Tout comme les activités, les fragments ont également un cycle de vie: Il existe deux méthodes :
Attachez- vous à l'activité - onAttach (Activity) Statique : via XML
Créer un fragment - onCreate (Bundle) Dynamique : via FragmentManager
Créer une vue - onCreateView (LayoutInflater,ViewGroup, Bundle)
Création d'activité - onActivityCreated (Bundle)
Etat de la vue restauré - onViewStateRestored (Bundle)
Rendre visible à l'utilisateur - onStart ()
début de l'interaction utilisateur - onResume ()
pause de l'interaction de l'utilisateur - onPause ()
Rendu invisible à l'utilisateur - onStop ()
Destruction de vue - onDestroyView ()
Détruire le fragment - onDestroy ()
Se détacher d'une activité - onDetach ()
Sous-classes de fragment Méthode Statique
DialogFragment - Pour afficher la boîte de dialogue Les étapes :
flottante Configurez votre environnement
PreferenceFragment - Utile pour créer une activité Définir la disposition des éléments graphiques dans fichier XML
propre au fragment.
de paramètres
Ajouter la balise fragment dans l'activité pour réserver sa place
dans l’affichage.
Créer une classe qui correspond au fragment, la classe herite de
la classe fragment.
Surchargé la méthode onCreateView. Pour faire la liaison avec le
fichier XML.
3 4
06/02/2021 06/02/2021
Méthode Statique Méthode Statique
• Configurez votre environnement Ajouter la balise FragmentContainerView dans l'activité:
Fichier: build.gradle Fichier: activity_main.xml
buildscript {
repositories { <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
google() }} android:layout_width="fill_parent"
android:layout_height="fill_parent" >
allprojects {
repositories { <androidx.fragment.app.FragmentContainerView
google()}} xmlns:android="http://schemas.android.com/apk/res/android"
dependencies { android:id="@+id/fragment_container_view"
def fragment_version = "1.2.5" android:layout_width="match_parent"
implementation "androidx.fragment:fragment:$fragment_version" android:layout_height="match_parent"
} android:name="com.example.ExampleFragment" />
</LinearLayout>
Méthode Statique Méthode Statique
Définir la disposition des éléments : Créer une classe qui correspond au fragment:
Fichier: ExampleFragment.xml Fichier: ExampleFragment.java
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" class ExampleFragment extends Fragment {
android:layout_width="match_parent" public ExampleFragment() {
android:layout_height="match_parent" a super(R.layout.example_fragment);
ndroid:orientation="vertical" }
android:background="#00ff00" >
@Override
<TextView public View onCreateView(LayoutInflater inflater, ViewGroup container,
android:id="@+id/textView1" Bundle savedInstanceState) {
android:layout_width="wrap_content" // TODO Auto-generated method stub
android:layout_height="wrap_content" return inflater.inflate(R.layout. example_fragment,container, false);
android:text="fragment frist" /> }
</LinearLayout> }
5 6
06/02/2021 06/02/2021
Méthode dynamique Méthode dynamique
Tous les étapes de la méthode statique, Exemple :
Contrairement à l'approche XML, l'attribut android: name
n'est pas utilisé dans la balise FragmentContainerView. public class ExampleActivity extends AppCompatActivity {
public ExampleActivity() {
super(R.layout.example_activity);
}
Etape 6 : Lier un fragment a FragmentContainerView par @Override
programmation protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.setReorderingAllowed(true)
.add(R.id.fragment_container_view, ExampleFragment.class, null)
.commit();
}
}
}
Méthode dynamique FragmentTransaction
Etape 6 : Lier le fragment dans l’activity qui affiche fragment un FragmentManager peut ajouter, supprimer, remplacer et
Vérifier si le fragment n’est pas encore ajouté effectuer d'autres actions avec des fragments en réponse à
Obtenir une instance de FragmentManager l'interaction de l'utilisateur.
Utiliser FragmentManager pour créer un FragmentTransaction Vous pouvez regrouper plusieurs actions en une seule
afin ajouter/supprimer/remplacer un fragment transaction
Chaque FragmentTransaction doit utiliser
setReorderingAllowed (true):
7 8
06/02/2021 06/02/2021
Ajouter ,supprimer et remplacer des
fragments le composant de navigation
Ajouter :
La fonction add () reçoit ID de ressource fragment, ainsi que le nom de Naviguer entre, entrer et sortir des différents
classe du fragment. éléments de contenu de votre application.
Le fragment ajouté passe à l'état RESUMED.
Pour supprimer: Implémenter par composant de navigation
appelez remove (), en transmettant une instance de fragment qui a été d’android Jetpack
récupérée du fragmentManager via findFragmentById () ou
findFragmentByTag () Le composant Navigation garantit également
la vue est supprimée du conteneur à ce stade. Le fragment supprimé est
déplacé vers l'état DESTROYED. une expérience utilisateur cohérente et
Remplacer : prévisible en adhérant à un ensemble de
replace () pour remplacer un fragment existant dans un conteneur par une principes établis.
instance d'une nouvelle classe de fragment que vous fournissez.
Appeler replace () équivaut à appeler remove () avec un fragment dans un
conteneur et à ajouter un nouveau fragment à ce même conteneur.
FragmentManager le composant de navigation
FragmentManager est la classe chargée d'effectuer des actions Il se compose de trois éléments clés :
Navigation graph : nouvelle ressource XML qui contient toutes les
sur les fragments de votre application, telles que les ajouter, informations relatives à la navigation dans un emplacement centralisé.
les supprimer ou les remplacer. NavHost: un conteneur vide qui affiche les destinations de votre
Accéder au FragmentManager : graphique de navigation.
NavController: un objet qui gère la navigation d'application dans un
Dans une activité: NavHost.
getSupportFragmentManager() méthode Lorsque vous naviguez dans votre application, vous indiquez
Dans un fragment : au NavController que vous souhaitez naviguer le long d'un
getChildFragmentManager(). chemin spécifique dans votre graphique de navigation ou
getParentFragmentManager()
directement vers une destination spécifique.
Le NavController affiche alors la destination appropriée dans
NavHost.
9 10
06/02/2021 06/02/2021
Mise en place Mise en place
Etape 1 : Configurez votre environnement
Fichier : build.gradle (app)
dependencies {
def nav_version = "2.3.2"
// Java language implementation
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"
// Feature module Support
implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"
implementation "androidx.navigation:navigation-compose:1.0.0-alpha05"
}
Mise en place Mise en place
Etape 2 : Créer un graphe de navigation: Etape 2 : Créer un graphe de navigation:
La navigation s'effectue entre les destinations de votre
application, c'est-à-dire à tout endroit de votre
application vers lequel les utilisateurs peuvent naviguer.
Ces destinations sont connectées via des actions .
Exemple :
11 12
06/02/2021 06/02/2021
Mise en place Mise en place
Dans la fenêtre Projet, cliquez avec le bouton droit sur le Etape 3 :Ajouter un NavHost à une activité
‘res’ répertoire et sélectionnez: Exemple :
new> Fichier de ressources Android .
Fichier : activity_main
Le nouveau fichier de ressources boîte de dialogue s'affiche.
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
Mise en place Mise en place
Etape 2 : créer un graphe de navigation Etape 3 :Ajouter un NavHost à une activité:
Vous pouvez modifier visuellement les graphiques de Attribut xml :
navigation(Editeur de navigation) ou modifier directement le L' android:name : contient le nom de classe de votre NavHost
XML sous-jacent. L' app:navGraph attribut associe le NavHostFragment à un
Fichier nav_graph.xml : graphique de navigation.
<?xml version="1.0" encoding="utf-8"?> L' app:defaultNavHost="true"attribut garantit que vous
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
NavHostFragment intercepte le bouton Retour du système.
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nav_graph">
</navigation>
13 14
06/02/2021 06/02/2021
Mise en place Mise en place
Etape 4 :Ajouter des destinations au graphique de navigation Etape 5 : Connecter les destinations
Créer une destination à partir d'un fragment ou d'une activité Une action est une connexion logique entre des destinations.
existante. Les actions sont représentées dans le graphique de navigation
sous forme de flèches.
Les actions connectent généralement une destination à une
autre,
On peut créer des actions globales qui vous mènent vers une
destination spécifique à partir de n'importe où dans votre
application.
Mise en place Mise en place
Etape 4 :Ajouter des destinations au graphique de navigation Etape 5 : Connecter les destinations
Chaque destination contient les champs suivants : Dans l’éditeur de graphe, cliquez sur le cercle du premier
Le champ Type indique si la destination est implémentée en tant que fragment et faites glisser votre curseur sur la destination.
fragment, activité ou autre classe personnalisée dans votre code source.
Le champ Label contient le nom du fichier de mise en page XML de la
destination.
Le champ ID contient l'ID de la destination qui est utilisé pour faire
référence à la destination dans le code.
La liste déroulante Classe affiche le nom de la classe associée à la
destination.
15 16
06/02/2021 06/02/2021
Mise en place Mise en place
Etape 5 : connecter les destinations ; Etape 6 : Naviguer vers une destination
Chaque action contient les champs suivants : Via BottomNavigationView
Le champ Type contient «Action». Créer un BottomNavigationView (un menu)
Le champ ID contient l'ID de l'action. BottomNavigationView est lié au NavController par le code suivant :
La destination champ contient l'ID du fragment de destination.
<fragment
android:id="@+id/blankFragment" AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
android:name="com.example.cashdog.cashdog.BlankFragment" R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)
android:label="fragment_blank" .build();
tools:layout="@layout/fragment_blank" > NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
<action NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
android:id="@+id/action_blankFragment_to_blankFragment2" NavigationUI.setupWithNavController(navView, navController);
app:destination="@id/blankFragment2" />
invalidateOptionsMenu();
</fragment>
<fragment
android:id="@+id/blankFragment2"
android:name="com.example.cashdog.cashdog.BlankFragment2"
android:label="fragment_blank_fragment2"
tools:layout="@layout/fragment_blank_fragment2" />
Mise en place
Etape 6 : Naviguer vers une destination
La navigation vers une destination se fait à l'aide d'un
NavController.
Chaque NavHost a son propre NavController correspondant.
Vous pouvez récupérer un NavController à l'aide de l'une des
méthodes suivantes:
NavHostFragment.findNavController(Fragment)
Navigation.findNavController(Activity, @IdRes int viewId)
Navigation.findNavController(View)
17 18