Vous êtes sur la page 1sur 10

UNIVERSITE DE CARTHAGE DEPARTEMENT

FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE


Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

Chapitre 5 : Les Fragments

1- Introduction :
Dans Android, Un fragment est un sous contrôleur d’une activité, contenant une vue
ainsi que son propre cycle de vie, capable d’être ajouté, retiré et déplacé d’une
activité.
• Nous pouvons combiner plusieurs fragments dans une seule activité
pour créer une interface utilisateur à plusieurs volets.
• Réutiliser un fragment dans plusieurs activités.

Le principal avantage d’un fragment est le fait d’être facilement déplaçable. Vous
avez donc tout intérêt à mettre la logique d’une vue dans un fragment, au cas où
vous voudrez déplacer cette vue, ou bien la réutiliser sur un autre écran (exemple :
affichage d’une liste d’utilisateur dans plusieurs emplacements).

Un fragment doit toujours être intégré à une activité et le cycle de vie du fragment
est directement affecté par le cycle de vie de l'activité hôte.

2- Cycle de vie d’un Fragment :


UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

Dans Android, les fragments ont leur propre cycle de vie très similaire à une activité,
mais ils comportent des événements supplémentaires qui sont particuliers à la
hiérarchie de la vue, à l'état et à l'attachement du fragment à son activité.

1. onAttach() : L'instance de fragment est associée à une instance d'activité .


Cette méthode est appelée en premier, avant même la méthode onCreate(). Cette
méthode nous permet de savoir que notre Fragment a été attaché à une activité.

@Override
public void onAttach (Activité d'activité) {
super.onAttach(activité);
// Ajoutez votre code ici qui s'exécute lorsque l'instance de fragment est
// associée
}

2. onCreate() : Ceci sera appelé lors de la création du fragment. Cela signifie qu'une
nouvelle instance de fragment s'initialise, ce qui se produit toujours après son
attachement à l'hôte.
UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

@Override
public void onCreate (Bundle saveInstanceState){
super.onCreate(saveInstanceState);
// Ajoutez votre code ici qui s'exécute lorsque l'instance du fragment
// s'initialise
}

3. onCreateView() : sera appelé lorsqu'il sera temps pour le fragment de dessiner


son interface utilisateur (interface utilisateur) pour la première fois. Pour dessiner
une interface utilisateur pour notre fragment, nous devons retourner un composant
View à partir de cette méthode qui est la racine de la mise en page de notre
fragment.

@Override
public View onCreateView(gonfleur LayoutInflater , conteneur ViewGroup , Bundle sa
veInstanceState ) {
Vue v = gonfler . inflate ( R . layout . fragment_test , container , false );
/* ajoutez votre code ici pour dessiner l'interface utilisateur pour la première f
ois signifie que dans cette méthode, nous pouvons obtenir la référence des vues qu
i sont créées dans notre fichier xml */
return v ;
}

4. onViewCreated() : Ceci sera appelé après la méthode onCreateView(). Cette


méthode est particulièrement utile lors de l'héritage de l'implémentation de la
méthode onCreateView() mais nous devons configurer les vues résultantes comme
avec un ListFragment et quand configurer un adapter .

@Override
public void onViewCreated ( View vue , Bundle saveInstanceState ) {
super.onViewCreated(vue, saveInstanceState );
/* ajoutez votre code ici qui s'exécute après l'exécution de la méthode
onCreateView(). */
}

5. onActivityCreated() : cette méthode est appelée après la méthode


onCreateView() lors de la création de l'activité hôte. Cette méthode indique que
l'onCreate() de l'activité est terminée.
UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

@Override
public void onActivityCreated ( Bundle saveInstanceState ) {
super . onActivityCreated ( saveInstanceState );
// ajoutez votre code ici qui s'exécute lorsque l'activité hôte est créée.
}

6. onStart() : cette méthode est appelée une fois que le fragment est visible.

@Override
public void onStart () {
super . onStart ();
// ajoutez votre code ici qui s'exécute lorsque le fragment devient visible.
}

7. onResume() : Cette méthode est appelée lorsque le Fragment est visible et


intraitable.

@Override
public void onResume () {
super . surResume ();
/* ajoutez votre code ici qui s'exécute lorsque le fragment est visible et
Intraitable */
}

8. onPause() : cette méthode est la première indication que l'utilisateur quitte le


fragment actuel ou que le fragment n'est plus interactif. Cela se produit lorsqu'une
transition de fragment est traitée ou qu'un fragment est supprimé.

@Override
public void onPause () {
UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

super.onPause ();
/* ajoutez votre code ici qui s'exécute lorsque l'utilisateur quittant le
fragment actuel ou le fragment n'est plus intraitable. */
}

9. onStop() : Cette méthode est appelée après la méthode onPause(). Le fragment va


être arrêté en appelant onStop(). Cette méthode appelle lorsque le fragment n'est
plus visible. il se produit soit après que le fragment est sur le point d'être supprimé
ou que la transition de fragment est traitée (remplacez le fragment) ou lorsque
l'activité de l'hôte s'arrête.

@Override
public void onStop () {
super.onStop();
// ajoutez votre code ici qui exécute Fragment qui va être arrêté.
}

10. onDestroyView() : cette méthode est appelée lorsque la vue et les autres
ressources associées créées dans la méthode onCreateView() sont supprimées de la
hiérarchie des vues de l'activité et détruites.

@Override public void onDestroyView () {


super.onDestroyView();
// ajoutez votre code ici qui s'exécute lorsque la vue et les autres ressources as
sociées créées dans la méthode onCreateView() sont supprimées
}

11. onDestroy () : cette méthode est appelée pour effectuer le nettoyage final de
l'état du fragment, mais il n'est pas garanti qu'elle soit appelée par la plate-forme
Android. Cette méthode est appelée après la méthode onDestroyView().

@Override public void onDestroy () {


super.onDestroy();
// Ajoutez votre code ici qui s'exécute lorsque le nettoyage final de l'état du
UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

fragment est nécessaire.


}

12. onDetach() : cette méthode appelée après la méthode onDestroy() pour notifier
que le fragment a été dissocié de son activité d'hébergement signifie que le fragment
est détaché de son activité hôte.

@Override public void onDetach () {


super.onDetach ();
// ajoutez votre code ici qui s'exécute lorsque le fragment a été dissocié de son
activité d'hébergement
}

3- Exemple de cycle de vie d’un fragment dans Android Studio :

4- Ajout de Fragment :
✓ Via XML :
Pour ajouter de manière déclarative un fragment au XML de votre mise en page
d'activité, utilisez un FragmentContainerView élément.

<!-- res/layout/example_activity.xml -->

<androidx.fragment.app.FragmentContainerView
UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.ExampleFragment" />

L' android:name attribut spécifie le nom de la classe Fragment à instancier. Lorsque la


mise en page de l'activité est gonflée, le fragment spécifié est nstancié, onInflate() est
appelé sur le fragment nouvellement instancié et un FragmentTransaction est créé
pour ajouter le fragment au fichier FragmentManager.

✓ Via Programmation:
Pour ajouter par programmation un fragment à la mise en page de votre activité, la
mise en page doit inclure un FragmentContainerViewpour servir de conteneur de
fragments, comme illustré dans l'exemple suivant :

<!-- res/layout/example_activity.xml -->

<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />

Contrairement à l'approche XML, l' android:name attribut n'est pas utilisé dans
le FragmentContainerView ici, donc aucun fragment spécifique n'est
automatiquement instancié. Au lieu de cela, a FragmentTransaction est utilisé pour
instancier un fragment et l'ajouter à la mise en page de l'activité.

public class TestActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.setReorderingAllowed(true)
.add(R.id.fragmentContainerViewFCV,
UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

CalculImcFragment.class, null)
.commit();
}

initView();
}

private void initView() {

Toolbar toolbar = findViewById(R.id.toolbar);


setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle(getString(R.string.fragment));
}
}

5- Communication entre le Fragment et son activité :


La communication se fait par :

➢ la création d’une interface au niveau du fragment et la déclaration d’une


instance de cette interface et l’instanciée dans la méthode onAttach() :

public class CalculImcFragment extends Fragment {

private Button calculerBTN;

private CalculImcCallBack calculImcCallBack;

@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof CalculImcCallBack){
calculImcCallBack = (CalculImcCallBack) context ;
}
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_calcul_imc, container,
false);
}
UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

initView(view);
initEvent();
}

public void initView(View view) {


calculerBTN = view.findViewById(R.id.calculBTN);
}

public void initEvent() {

calculerBTN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

calculImcCallBack.onButtonClicked();
}
});
}

public interface CalculImcCallBack {


void onButtonClicked();
}

➢ Au niveau de l’activité, il suffit d’implémenter l’interface.

public class TestActivity extends AppCompatActivity implements


CalculImcFragment.CalculImcCallBack {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.setReorderingAllowed(true)
.add(R.id.fragmentContainerViewFCV,
CalculImcFragment.class, null)
.commit();
}

initView();
}

private void initView() {

Toolbar toolbar = findViewById(R.id.toolbar);


setSupportActionBar(toolbar);
UNIVERSITE DE CARTHAGE DEPARTEMENT
FACULTE DES SCIENCES DE BIZERTE INFORMATIQUE
Classe : GLSI3 AU : 2021/2022
Matière : Android Studio Semestre : 1
Enseignante : Cherifa Nakkach

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle(getString(R.string.fragment));
}

@Override
public void onButtonClicked() {
Toast.makeText(TestActivity.this,"button Clicked
!!",Toast.LENGTH_LONG).show();

}
}

Vous aimerez peut-être aussi