0% ont trouvé ce document utile (0 vote)
85 vues14 pages

TP 44

Le TP7 se concentre sur la création d'une application Android avec un menu Navigation Drawer et une gestion des enseignants via RecyclerView. Il comprend des étapes pour configurer le projet, créer des fragments, gérer la navigation et implémenter un adaptateur pour afficher les enseignants. Enfin, le TP aborde également la création de menus d'options et de boîtes de dialogue pour enrichir l'interface utilisateur.

Transféré par

Imen Hichri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
85 vues14 pages

TP 44

Le TP7 se concentre sur la création d'une application Android avec un menu Navigation Drawer et une gestion des enseignants via RecyclerView. Il comprend des étapes pour configurer le projet, créer des fragments, gérer la navigation et implémenter un adaptateur pour afficher les enseignants. Enfin, le TP aborde également la création de menus d'options et de boîtes de dialogue pour enrichir l'interface utilisateur.

Transféré par

Imen Hichri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Atelier Développement

Mobile Native TP 7

TP 7
Navigation Drawer _RecyclerView – Menus –
Boites de dialogues
Objectif
Dans ce TP7, l’objectif est de lister l’ensemble des enseignants; tout en utilsant
un menu Navigation Darwer pour naviguer dans l’application le résultat en fin de tp
ressemblera à la figure ci-dessous.

Pour y arriver deux étapes sont à réaliser :


 Etape A : création du projet avec le menu Navigation Drawer et le menu d’option
 Etape B : fonctionnalité pour la gestion des enseignants

Etape A : création du projet avec le menu Navigation Darwer et le


menu d’option :
Voici un exemple complet d'une application Android utilisant un `DrawerLayout` avec une `Toolbar` et
des fragments. Suivez ces étapes :

Étape 1 : Configuration du Projet


1. Créer un nouveau projet Android dans Android Studio avec une activité vide.
Hend Ben Ayed Kharrat 2024/2025 1
Atelier Développement
Mobile Native TP 7

Étape 2 : Créer la mise en page XML


1. Modifier activity_main.xml pour inclure le DrawerLayout, la Toolbar, et le NavigationView :
<?xml version="1.0" encoding="utf-8"?>
<[Link]
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_layout"
tools:openDrawer="start"
tools:context=".MainActivity">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- La Toolbar -->
<[Link]
android:layout_width="match_parent"
android:layout_height="56dp"
android:id="@+id/toolbar"
android:elevation="4dp"
android:background="@color/lavender"
android:theme="@style/[Link]"
/>
<!-- Contenu principal -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment_container"/>
</LinearLayout>
<!-- Menu du Drawer -->
<[Link]
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/nav_view"
app:headerLayout="@layout/nav_header"
app:menu="@menu/nav_menu"
app:itemIconTint="@color/lavender"
android:layout_gravity="start"
android:theme="@style/[Link]"/>
</[Link]>

Hend Ben Ayed Kharrat 2024/2025 2


Atelier Développement
Mobile Native TP 7

Étape 3 : Créer le Menu de Navigation


1. Créer un dossier menu dans res, si ce n'est pas déjà fait.
2. Ajouter un fichier XML pour le menu dans res/menu/nav_menu.xml :
Rappelez vous de la structure d’un Drawer Navigation Layout

<?xml version="1.0" encoding="utf-8"?>


<menu
xmlns:android="[Link]

xmlns:tools="[Link]
tools:showIn="navigation_view">
<group>
<item
android:id="@+id/nav_about"
android:icon="@drawable/nav_about"
android:title="About" />
<item
android:id="@+id/nav_home"
android:icon="@drawable/nav_home"
android:title="Gerer Enseignant" />
</group>
<item android:title="">
<menu>
<item
android:id="@+id/nav_logout"
android:icon="@drawable/nav_exit"
android:title="Logout" />
</menu>
</item>
</menu>

Étape 4 : Créer l'En-tête du Menu


1. Créer un fichier de mise en page pour l'en-tête dans res/layout/nav_header.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
Hend Ben Ayed Kharrat 2024/2025 3
Atelier Développement
Mobile Native TP 7

xmlns:android="[Link]
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="176dp"
android:gravity="bottom"
android:padding="16dp"
android:theme="@style/[Link]" >
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/sym_def_app_icon" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="My App"
android:textAppearance="@style/[Link].Body1"
/>

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="user@[Link]" />
</LinearLayout>

Étape 5 : Configurer MainActivity


1. Modifier [Link] pour gérer le DrawerLayout et les clics sur les éléments du menu :
package [Link].tp6recyclerviewmeu;

import …
public class MainActivity extends AppCompatActivity
implements [Link] {
ActivityMainBinding bind;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
bind = [Link](getLayoutInflater());
View view = [Link]();
setContentView(view);
setTitle("My App");

// Initialiser la Toolbar
setSupportActionBar([Link]);

// Gestion des clics dans le Navigation Drawer

Hend Ben Ayed Kharrat 2024/2025 4


Atelier Développement
Mobile Native TP 7

[Link](this);
// Initialiser le DrawerLayout

// Ajouter un Listener pour ouvrir/fermer


ActionBarDrawerToggle toggle = new
ActionBarDrawerToggle(this, [Link], [Link], [Link].open_drawer,
[Link].close_drawer);
[Link](toggle);
[Link]();

// Charger le fragment sélectionné


if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace
([Link].fragment_container, new AboutFragment()).commit();
[Link]([Link].nav_home);

}
}

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
if ([Link]() ==[Link].nav_home) {
[Link]("Enseignants");
getSupportFragmentManager().beginTransaction().replace
([Link].fragment_container, new homeFragment()).commit();

}else if ([Link]()==[Link].nav_about){
[Link]("About");
getSupportFragmentManager().beginTransaction().replace
([Link].fragment_container, new AboutFragment()).commit();

}else if([Link]()==[Link].nav_logout)
{ Log.i("tag","exit");
[Link](this,"Exit",Toast.LENGTH_LONG).show();
finish();
}
[Link]([Link]);
return true;

}
@Override
public void onBackPressed(){
if([Link]([Link])){
[Link]([Link]);

}else{
[Link]();
}

Étape 6 : Créer les Fragments

1. Créer [Link] :

Hend Ben Ayed Kharrat 2024/2025 5


Atelier Développement
Mobile Native TP 7

package [Link].tp6recyclerviewmeu;
import …
public class AboutFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return [Link]([Link].fragment_about, container, false);
//Action à ajouter pour les fonctionnalités du fragment
}
}
2. Créer [Link] :
package [Link].tp6recyclerviewmeu;
import …
public class homeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return [Link]([Link].fragment_about, container, false);
//Action à ajouter pour les fonctionnalités du fragment
}
}

Étape 7 : Créer les Layouts des Fragments


1. Créer fragment_about.xml :
<?xml version="1.0" encoding="utf-8"?>
<[Link]
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AboutFragment">

<!-- TODO: Update blank fragment layout -->


<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ABOUT FRAGMENT"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</[Link]>
Hend Ben Ayed Kharrat 2024/2025 6
Atelier Développement
Mobile Native TP 7

2. Créer fragment_home.xml :
<?xml version="1.0" encoding="utf-8"?>
<[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frag_home"
tools:context=".homeFragment">
<TextView
android:id="@+id/header_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:background="#ff2555"
android:padding="10dp"
android:text="@string/liste_enseignants"
android:textColor="@android:color/white"
/>
<[Link]
android:id="@+id/mRecyclerview"
android:layout_width="424dp"
android:layout_height="634dp"
android:scrollbars="vertical"
/>
</[Link]>
Étape 8 : Tester l'application
1. Lancer votre application sur un émulateur ou un appareil physique.
2. Ouvrir le Navigation Drawer en glissant depuis le bord gauche de l'écran ou en appuyant sur le
bouton de menu de la Toolbar.
3. Naviguer entre les fragments en sélectionnant les éléments du menu.
Avec ces étapes, vous avez créé une application Android avec un `DrawerLayout` fonctionnel, une
`Toolbar`, et des fragments pour gérer la navigation. Vous pouvez maintenant personnaliser davantage les
fragments, ajouter des icônes dans le menu, ou enrichir l'interface utilisateur selon vos besoins. N'oubliez
pas de tester les interactions et d'ajuster les styles selon votre design.

Etape B : fonctionnalité pour la gestion des enseignants

RecyclerView Pour la liste de Enseignants


Implémentant maintenant notre Liste d’enseignants sous forme de RecyclerView

Hend Ben Ayed Kharrat 2024/2025 7


Atelier Développement
Mobile Native TP 7

Étape 1: définir le RecyclerView dans la mise en page


<[Link]
android:id="@+id/mRecyclerview"
android:layout_width="424dp"
android:layout_height="634dp"
android:scrollbars="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/header_list" />

Dans MainActivity:
RecyclerView rv = (RecyclerView)findViewById([Link]. mRecyclerview);
Ou bind. mRecyclerview…..

Si vous êtes sûr que la taille du RecyclerView ne changera pas, vous pouvez ajouter les
éléments suivants pour améliorer les performances:
[Link](true);

Étape 2: Utilisation d’un LayoutManager


Un RecyclerView a besoin d’une LayoutManager pour gérer le positionnement de ses articles.
Dans ce tp, utilisez un LinearLayoutManager. Ce LayoutManager sous-classe, par défaut, rendra
votre RecyclerView ressemble à un ListView.

Étape 3: Définition des données (Modèle)


Une RecyclerView a besoin d’un adaptateur pour accéder à ses données. Mais avant de créer
un adaptateur, créons des données avec lesquelles nous pouvons travailler.
 Créez une classe simple (POJO) pour représenter un Teacher, caractérisé par son
nom et email
Étape 4: création d’un CardView pour l’Item Teacher
Une CardView est un ViewGroup. Comme n’importe quel autre ViewGroup, il peut être ajouté à
votre Activity ou Fragment à l’aide d’un fichier XML de mise en page.
Pour créer un vide CardView, vous devrez ajouter le code suivant à votre mise en page
XML, comme indiqué dans l’extrait de code suivant:
<[Link]
xmlns:card_view="[Link]
xmlns:android="[Link]
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="60dp"
card_view:cardCornerRadius="4dp">

créons maintenant un LinearLayout dans le CardView. le CardView pourrait représenter, par


exemple, un payset contenir les éléments suivants:
o une TextView pour afficher le nom du teacher

Hend Ben Ayed Kharrat 2024/2025 8


Atelier Développement
Mobile Native TP 7

o une TextView pour afficher l’email du teacher

Étape 5: création d’un adaptateur


Pour créer un adaptateur vous devez étendre [Link]. Cet adaptateur suit
le viewHolder, ce qui signifie que vous devez définir une classe personnalisée qui
étend [Link].
Étape 6: Utilisation de l’adaptateur
Maintenant que l’adaptateur est prêt, ajoutez le code suivant à votre Activity pour initialiser
et utiliser l’adaptateur en appelant le constructeur de l’adaptateur et le RecyclerView
de setAdapter
Étape 7: Compilez et exécutez

Menu D’options – Boites de Dialogues


La plate-forme Android propose 3 types de menus :
- Menu d'options : situé sur ActionBar ou Toolbar, il s'agit du menu principal d'Android. Il est
généralement utilisé pour fournir des informations supplémentaires sur une application, ainsi que pour
créer un lien vers des sections d'aide et de paramètres.
- Menu contextuel : affichage lors d' un clic long sur une vue, par exemple : une ligne ListView, fournit
généralement des méthodes de personnalisation pour cette vue.
- Menu contextuel (PopUp Menu) : s'affiche sous forme de boîte de dialogue contextuelle lorsque vous
cliquez sur une vue comme un bouton, une vue d'image,...

Commençons par le menu d’option


1. Ajouter un fichier XML pour le menu option Enseignant dans
res/menu/menu_main_enseig_xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="[Link]
xmlns:app="[Link]
<item
android:id="@+id/a_z"
android:title="Sort A-Z"
app:showAsAction="never" />
<item
android:id="@+id/z_a"
android:title="Sort Z-A"
app:showAsAction="never" />

<item
android:id="@+id/add"
android:icon="@mipmap/add"
android:title="Add"
app:showAsAction="ifRoom"
/>
</menu>
2. Ajouter un fichier XML pour le menu option About dans res/menu/menu_main_about_xml :

Hend Ben Ayed Kharrat 2024/2025 9


Atelier Développement
Mobile Native TP 7

<?xml version="1.0" encoding="utf-8"?>


<menu xmlns:android="[Link]
xmlns:app="[Link]
<item
android:id="@+id/about"
android:icon="@drawable/about"
android:title="About"
app:showAsAction="ifRoom"
/>
</menu>
3. //création dans le MainActivity
Menu menu;
@Override
public boolean onCreateOptionsMenu(Menu menus) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate([Link].menu_main_about, menus);
[Link]=menus;
return [Link](menu);
}

boolean enseig=false;boolean about=false;


@Override
public boolean onPrepareOptionsMenu(Menu menu) {
[Link](); // Clear the existing menu items
// ajouter une condition pour active le enu correspondant au fragment choisi
if (enseig) {
getMenuInflater().inflate([Link].menu_main_enseig, menu); // Inflate
menu for option 1
} else if(about) {
getMenuInflater().inflate([Link].menu_main_about, menu); // Inflate menu
for option 2
}

return [Link](menu);
}

4. Dans le navigation menu


Pour chaque item choisi ajouté :
if ([Link]() ==[Link].nav_home) {
[Link]("Enseignants");
enseig=true;about=false;
invalidateOptionsMenu();
getSupportFragmentManager().beginTransaction().replace
([Link].fragment_container, new homeFragment()).commit();
}
et vous poursuivez de la même façon

5. Evénement de clic
En gérant chaque événement de clic d'élément en remplaçant onOptionsItemSelected() , distinguez
chaque événement d'entité par son identifiant :
// action sur le menu d’option
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if ([Link]() == [Link].a_z) {
[Link](teachers);

Hend Ben Ayed Kharrat 2024/2025 10


Atelier Développement
Mobile Native TP 7

return true;

} else if ([Link]() == [Link].z_a) {


[Link](teachers);
return true;

} else if ([Link]() == [Link]) {


showAddingDialog();
}

return [Link](item);
}
Les méthodes sortByName et reverseByName doivent etre définit dans le adaptateur puisque nous allons
manipuler les données du recyclerView
Utiliser les collections avec l’interface Comparator
[Link]
public void sortByName(List<Teacher> Teacher) {
…….
notifyDataSetChanged();

}
public void reverseByName(List<Teacher> Teacher) {
…..
notifyDataSetChanged();

Boite de dialogue personnalisé pour l’ajout de Teacher


Le click sur le menu add du menu d’option lance une boite de dialogue pour l’ajout d’enseignant
1. Appel boite de dialogue suite au click sur le menu add du menu d’option
//boite de dialogue pour ajout teacher
private void showAddingDialog() {
MyDialogFragment dialog = new MyDialogFragment();
[Link](getSupportFragmentManager(), "my_dialog");
}
}

2. Ajouter une classe MyDialogFragment:


package [Link].tp6recyclerviewmeu;

import …
public class MyDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
[Link] builder = new
[Link](requireContext());
final View dialogView =
[Link]().inflate([Link].layout_add_dialog, null, false);
//fait reference à une boite de dialogue (layout xml) à creer
[Link](dialogView);

Hend Ben Ayed Kharrat 2024/2025 11


Atelier Développement
Mobile Native TP 7

//recuperer edit text du dialog view


final EditText nom = (EditText) [Link]([Link].edit_text);
final EditText email = (EditText) [Link]([Link]);
return [Link]("Ajouter Nouveau Enseignant\"")
.setMessage("Donner nom enseignant")
.setPositiveButton("Valider",new
[Link]() {
public void onClick(DialogInterface dialog, int whichButton) {
//action en cas de reponse positive

})
.setNegativeButton("Annuler", new
[Link]() {
public void onClick(DialogInterface dialog, int whichButton) {
//Action or
//do nothing, just close this dialog
}
}).create();
}}

Menu contextuel
Le menu contextuel apparaît lorsque les utilisateurs appuient longuement sur les éléments de l'interface
utilisateur, en appuyant sur l'élément et en le maintenant enfoncé jusqu'à ce que le menu apparaisse.
Dans notre Interface le click long sur un item du recyclerview affiche un menu contextuel qui permet ou
bien de supprimer l’item selectionné (bien sur d’autre action peuvent être ajoutées)

Hend Ben Ayed Kharrat 2024/2025 12


Atelier Développement
Mobile Native TP 7

Étape 1: Création Item


Comme le menu d'options, il est également déclaré par le fichier xml dans le dossier res/menu
Étape 2: Création Menu Contextuel
Dans le code par programmation, créez ContextMenu en remplaçant onCreateContextMenu() dans la
classe du ViewHolder
Étape 3: Item sélectionné du Menu Contextuel
Et gérer chaque événement d'élément ContextMenu dans onContextItemSelected() dans le fragment en
question
 Définir la méthode public void removeItem(int position)
{………….} de la classe adapter pour l’item delete

Popup Menu
Un PopupMenu affiche un Menu dans une fenêtre contextuelle modale ancrée à une Vue. La fenêtre
contextuelle apparaîtra sous la vue d'ancrage s'il y a de la place, ou au-dessus s'il n'y en a pas.
Dans ce tp, nous montrons un PopupMenu lorsque vous cliquez sur un TextView, le gonfler et gérer son
événement de clic sur les éléments est si simple

Pour ce faire :
Étape 1: Création Item
Comme le menu d'options, il est également déclaré par le fichier xml dans le dossier res/menu
Étape 2: Appel du menu d’option
L’événement clic sur le textview lance une méthode onShowPopupMenu()

Hend Ben Ayed Kharrat 2024/2025 13


Atelier Développement
Mobile Native TP 7

//popup menu
[Link](onShowPopupMenu());
Étape 3: Création du menu PopUp
private [Link] onShowPopupMenu() {
return new [Link]() {
@Override
public void onClick(View v) {
popupMenu = new PopupMenu(getActivity(), v);
[Link](onPopupMenuClickListener());
[Link]([Link].menu_pop_up);
[Link]();
}
};
}

Étape 4: Item sélectionné du menu PopUp


Définir la méthode onPopupMenuClickListener()
private [Link] onPopupMenuClickListener() {
return new [Link]() {
@Override
public boolean onMenuItemClick(MenuItem item) {
….
}

};

}
Utiliser [Link]() et [Link]([Link]|VISIBLE)
Pour visualiser et cacher le recyclerView

Hend Ben Ayed Kharrat 2024/2025 14

Vous aimerez peut-être aussi