La manière la plus flexible de créer une boîte de dialogue n'est pas d'utiliser la classe andorid.app.Dialog mais la classe DialogFragment. Grâce à elle, vous bénéficiez de toutes les fonctionnalités du fragment, y compris la possibilité d'observer le cycle de vie du dialogue et d'utiliser des ViewModels.

Qu'est-ce qu'un DialogFragment ?

Un DialogFragment est un fragment qui affiche une fenêtre de dialogue, flottant au dessus de la fenêtre de son activité. Ce fragment contient un objet Dialog, qu'il affiche de manière appropriée en fonction de l'état du fragment.

Dans cette classe, nous utilisons le support dialogfragment puisque le framework android.app.dialogFragment a été déprécié au niveau 28 de l'API.

Notre implémentation va surcharger cette classe et implémenter
le onCreateView(LayoutInflater, ViewGroup, Bundle) pour fournir le contenu de la boîte de dialogue. Nous pouvons également surcharger onCreateDialog(Bundle) pour créer une boîte de dialogue entièrement personnalisée, telle qu'un AlertDialog, avec son propre contenu.

Dans cet article, nous allons apprendre ce qui suit :

  1. Créer un dialogue avec ListView en kotlin.
  2. Utilisation de DialogFragment pour créer des dialogues avec une mise en page personnalisée, comme des dialogues d'alerte, des dialogues de saisie, etc.
  3. Créer des menus popup

(a). Kotlin Android DialogFragment avec ListView

Tutoriel Kotlin Android DialogFragment avec ListView.

Nous voulons voir comment ouvrir un DialogFragment lorsqu'un simple bouton est cliqué. Le dialogFragment sera composé d'un titre et d'une liste.

Nous le gonflons via la classe LayoutInflater à partir d'une spécification de mise en page xml.

Lorsque l'utilisateur clique sur un élément de la liste, nous l'affichons dans un Toast. Lorsque l'utilisateur clique en dehors du DialogFragment, nous le rejetons (le DialogFragment).

Allons-y.

Tutoriel vidéo

Nous avons un tutoriel vidéo comme alternative à ceci. Si vous préférez les tutoriels comme celui-ci, il serait bon de vous abonner à notre chaîne YouTube. Fondamentalement, nous avons une télévision pour la programmation où faire des tutoriels quotidiens en particulier Android.

Kotlin Android DialogFragment avec simple ListView

Regardons un exemple complet.

Outils

  1. IDE : Android Studio - l'IDE officiel d'android soutenu par Jetbrains et Google.
  2. Langage : Kotlin - Langage statiquement typé développé par Jetbrains.
  3. Emulateur : Nox Player - Un émulateur assez rapide pour ma machine lente.

Scripts Gradle

Nous commençons par explorer nos scripts Gradle.

(a). build.gradle(App)

Voici notre fichier build.gradle au niveau **app. Nous avons le DSL des dépendances où nous ajoutons nos dépendances.

Ce fichier est appelé app level build.gradle puisqu'il est situé dans le dossier app du projet.

Si vous utilisez Android Studio version 3 et supérieure, utilisez le mot-clé implementation tandis que si vous utilisez une version inférieure à 3, utilisez toujours le mot-clé compile.

Une fois que vous avez modifié ce fichier build.gradle, vous devez synchroniser votre projet. Android Studio va en effet vous demander de le faire.

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "info.camposha.kotlindialogfragment"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
}

Vous pouvez également voir que nous avons commencé par appliquer deux plugins spécifiques à kotlin dans notre fichier build.gradle :

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

c'est-à-dire kotlin-android et kotlin-android-extensions.

Code Kotlin

Les applications Android peuvent être principalement écrites en Java ou en Kotlin. De nos jours, il existe cependant de nombreux frameworks comme Flutter qui utilisent des langages comme Dart.

Dans ce cours, nous utilisons le langage de programmation Kotlin.

Nous aurons ces classes dans notre projet.

(a). PioneersFragment.kt

Représente notre FragmentDialog et sera en fait dérivé de celui-ci.

1. Création d'un DialogFragment.

Nous commençons par créer une classe Kotlin qui dérive de android.support.v4.app.DialogFragment. Nous utilisons la bibliothèque de support fragment puisque android.app.DialogFragment est déprécié.

class PioneersFragment : DialogFragment() {..}

Notez que la déclaration ci-dessus a inclus un constructeur vide par défaut pour notre DialogFragment. Nous le faisons en utilisant les parenthèses(()) en Kotlin.

2. Surcharge de la fonction OnCreateView() de DialogFragment.

Nous allons ensuite surcharger la méthode onCreateView() de la classe Fragment.

 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {..}

Nous avons passé trois paramètres :

  1. Un objet LayoutInflater.
  2. Objet ViewGroup.
  3. Objet Bundle.

3. Gonfler une mise en page dans un DialogFragment.

Dans la méthode, nous gonflons d'abord le layout R.layout.fraglayout via la méthode inflate, en utilisant l'instance LayoutInflater.

        val rootView = inflater.inflate(R.layout.fraglayout, container)

4. Création d'un tableau Kotlin

Créez ensuite un tableau Kotlin en utilisant la méthode arrayOf(). Cela agira comme notre source de données pour héberger les pionniers. C'est ce que nous lierons à la ListView que nous montrerons dans notre DialogFragment.

var pioneers = arrayOf("Dennis Ritchie", "Rodney Brooks", "Sergey Brin", "Larry Page", "Cynthia Breazeal", "Jeffrey Bezos", "Berners-Lee Tim", "Centaurus A", "Virgo Stellar Stream")

5. Lier une ListView à un tableau Kotlin en utilisant ArrayAdapter.

Nous faisons ensuite référence à notre [ListView] (https://camposha.info/android/listview) et définissons son adaptateur. Nous utiliserons arrayadapter.

        val myListView = rootView.findViewById(R.id.myListView) as ListView
        myListView!!.adapter = ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, pioneers)

6. Définir le titre d'un DialogFragment .

Nous définissons le titre du DialogFragment en utilisant la méthode setTitle(), vous passez un String à cette méthode.

        this.dialog.setTitle("Tech Pioneers")

7. Écouter les événements Click de ListView en Kotlin

Disons que nous voulons afficher un message Toast lorsqu'une ListView est cliquée, en montrant l'élément cliqué :

        myListView.setOnItemClickListener {
            adapterView,
            view,
            position,
            l
            -> Toast.makeText(activity, pioneers[position], Toast.LENGTH_SHORT).show()
        }

Voici le code complet de la classe PioneersFragment :

package info.camposha.kotlindialogfragment

import android.os.Bundle
import android.support.v4.app.DialogFragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.Toast

class PioneersFragment : DialogFragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val rootView = inflater.inflate(R.layout.fraglayout, container)
        var pioneers = arrayOf("Dennis Ritchie", "Rodney Brooks", "Sergey Brin", "Larry Page", "Cynthia Breazeal", "Jeffrey Bezos", "Berners-Lee Tim", "Centaurus A", "Virgo Stellar Stream")

        val myListView = rootView.findViewById(R.id.myListView) as ListView
        //with arrayadapter you have to pass a textview as a resource, and that is simple_list_item_1
        myListView!!.adapter = ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, pioneers)

        this.dialog.setTitle("Tech Pioneers")

        myListView.setOnItemClickListener {
            adapterView,
            view,
            position,
            l
            -> Toast.makeText(activity, pioneers[position], Toast.LENGTH_SHORT).show()
        }

        return rootView
    }
}
(c). MainActivity.kt

Ceci est notre MainActivity. Elle contiendra un bouton qui, lorsqu'il sera cliqué, affichera ou ouvrira notre DialogFragment.

1. Créer une activité en Kotlin

Vous devez juste créer une classe, lui donner un identifiant puis la faire dériver de android.support.v7.app.AppCompatActivity :

class MainActivity : AppCompatActivity() {..}

2. Surchargez la méthode onCreate() de l'Activity.

La méthode onCreate() est une méthode qui est levée lorsque notre activité est créée.

Ici, nous appelons la méthode onCreate() de la super class. Ensuite, nous utilisons la méthode setContentView() pour gonfler notre activity_main.xml :

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

3. Référencement des widgets en Kotlin

Vous pouvez référencer les widgets depuis leur layout respectif en utilisant la méthode findViewById() de l'activité.

Comme nous le faisons avec notre bouton.

        val openFragmentBtn = findViewById(R.id.openFragmentID) as Button

4. Obtenir le FragmentManager d'une activité

Les fragments sont hébergés par les activités. Par conséquent, une activité maintient un supportFragmentManager comme propriété.

Nous pouvons l'obtenir de cette façon :

        val fm = supportFragmentManager

5. Ouvrir/Montrer un Fragment.

Nous pouvons ouvrir un Fragment ou le montrer. Mais d'abord, nous devons instancier ce Fragment :

        val pioneersFragment = PioneersFragment()

Ensuite, nous pouvons l'ouvrir lorsque l'utilisateur clique sur un bouton en invoquant la méthode show() de la classe Fragment :


        openFragmentBtn.setOnClickListener(object : View.OnClickListener {
            override fun onClick(view: View) {
                pioneersFragment.show(fm, "PioneersFragment_tag")
            }
        })

Voici le code complet de la MainActivity :

package info.camposha.kotlindialogfragment

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val openFragmentBtn = findViewById(R.id.openFragmentID) as Button

        val fm = supportFragmentManager
        val pioneersFragment = PioneersFragment()

        openFragmentBtn.setOnClickListener(object : View.OnClickListener {
            override fun onClick(view: View) {
                pioneersFragment.show(fm, "PioneersFragment_tag")
            }
        })
    }
}
//end

Ressources de mise en page

(a). activité_main.xml

Ceci est le layout de notre activité principale. Il contiendra notre bouton qui, lorsqu'il sera cliqué, ouvrira notre DialogFragment.

Ce layout sera gonflé dans l'interface utilisateur de l'activité principale. Cela se fera via la méthode setContentView() de l'activité qui nous demandera de lui passer le layout.

Nous le ferons dans la méthode onCreate() de Activity.

Nous utilisons les éléments suivants :

  1. RelativeLayout
  2. Bouton

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

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    tools_context=".MainActivity">

    <Button
        android_id="@+id/openFragmentID"
        android_text="Open Fragment"
        android_background="@color/colorAccent"
        android_layout_centerInParent="true"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content" />

</RelativeLayout>
(b). fraglayout.xml

Notre layout DialogFragment. Ce layout sera gonflé en interface utilisateur pour notre Fragment de dialogue.

Il contiendra une simple ListView.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android_orientation="vertical" android_layout_width="match_parent"
    android_layout_height="match_parent">

    <ListView
        android_id="@+id/myListView"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"/>

</LinearLayout>

Ressources de valeur

(a). colors.xml

Les couleurs de notre design matériel :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="material_amber_700">#ffffa000</color>
    <color name="material_amber_800">#ffff8f00</color>
    <color name="material_amber_900">#ffff6f00</color>
    <color name="material_amber_A100">#ffffe57f</color>
    <color name="material_amber_A200">#ffffd740</color>
    <color name="material_amber_A400">#ffffc400</color>

</resources>
(b). styles.xml

Le style de notre application.

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/material_amber_A400</item>
        <item name="colorPrimaryDark">@color/material_amber_900</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

(b). Android DialogFragment - Show RecyclerView

Cet exemple va montrer une recyclerview dans diaogfragment..

Lorsque l'utilisateur clique sur un bouton show, nous ouvrons un dialogfragment, en y affichant un RecyclerView.

Résumé du projet

No. Dossier Responsabilité majeure
1. MyHolder.java Classe ViewHolder RecyclerView.
2. MyAdapter.java Classe de l'adaptateur de données RecyclerView.
3. TVShowFragment.java Classe DialogFragment 4.
4. MainActivity.java Classe de l'activité
5. activity_layout.xml A gonfler à MainActivity
6. content_main.xml A inclure à l'intérieur de l'activité_main.xml. Nous ajoutons nos veiws et widgets ici.
7. fraglayout.xml Le layout à gonfler à notre DialogFragment personnalisé.
8. model.xml Pour modéliser la façon dont chaque élément de la vue recyclée apparaîtra

1. Créer un projet d'activité de base

  1. Tout d'abord créer un projet vide dans android studio. Allez à File --> New Project.
  2. Tapez le nom de l'application et choisissez le nom de l'entreprise.
  3. Choisissez le SDK minimum.
  4. Choisissez l'activité de base.
  5. Cliquez sur Terminer.

L'"activité" de base aura une barre d'outils et un bouton d'action flottant déjà ajoutés dans le modèle.

Normalement, deux mises en page sont générées avec cette option :

No. Nom Type Description
1. activity_main.xml XML Layout Sera gonflé dans MainActivity Layout.Typiquement contient appbarlayout avec barre d'outils.a également un floating actionbutton.
2. content_main.xml XML Layout Sera inclus dans activity_main.xml.Vous ajoutez vos vues et widgets ici.
3. MainActivity.java Classe Activité principale.

Dans cet exemple, j'ai utilisé une activity de base.

Cette activité sera automatiquement enregistrée dans le fichier android_manifest.xml. Les activités Android sont des composants et doivent normalement être enregistrées comme un composant d'application.

Si vous avez créé le vôtre manuellement, alors enregistrez-le à l'intérieur du <application>...<application> comme suit, en remplaçant le MainActivity par le nom de votre activity :


        <activity android_name=".MainActivity">

            <intent-filter>

                <action android_name="android.intent.action.MAIN" />

                <category android_name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

Vous pouvez voir qu'une action et une catégorie sont spécifiées comme filtres d'intention. La catégorie fait de notre MainActivity une activité de lancement. Les activités de lancement sont exécutées en premier lorsque l'application android est lancée.

3. Créer l'interface utilisateur

Voici nos mises en page pour ce projet :

activity_main.xml

  • Ce layout est gonflé en interface utilisateur MainActivity.
  • Il inclut le content_main.xml.

Voici quelques-uns des widgets, vues et groupes de vues qui sont utilisés".

No. View/ViewGroup Package Role
CordinatorLayout android.support.design.widget Super-powered framelayout qui fournit la décoration de haut niveau de notre application et spécifie également les interactions et le comportement de tous ses enfants.
Un enfant de LinearLayout qui dispose ses enfants verticalement et fournit des concepts de barre d'application Material Design comme les gestes de défilement.
3. ToolBar <android.support.v7.widget Un ViewGroup qui peut fournir des fonctionnalités de barre d'action tout en étant utilisé dans les dispositions d'application.
4. FloatingActionButton <android.support.design.widget Une image circulaire flottant au-dessus de l'interface utilisateur que nous pouvons utiliser comme boutons.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_fitsSystemWindows="true"
    tools_context="com.tutorials.hp.dialogfragmentrecyclerview.MainActivity">

    <android.support.design.widget.AppBarLayout
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android_id="@+id/toolbar"
            android_layout_width="match_parent"
            android_layout_height="?attr/actionBarSize"
            android_background="?attr/colorPrimary"
            app_popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android_id="@+id/fab"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_gravity="bottom|end"
        android_layout_margin="@dimen/fab_margin"
        android_src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

contenu_main.xml

Ce layout est inclus dans votre activity_main.xml.
Vous définissez vos widgets d'interface utilisateur ici même.

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

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    app_layout_behavior="@string/appbar_scrolling_view_behavior"
    tools_context="com.tutorials.hp.dialogfragmentrecyclerview.MainActivity"
    tools_showIn="@layout/activity_main">

    <TextView
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="Hello World!" />
</RelativeLayout>
fraglayout.xml

Ce layout sera gonflé à notre DialogFragment.

Il contiendra notre RecyclerView comme notre adapterview :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android_orientation="vertical" android_layout_width="match_parent"
    android_layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android_id="@+id/mRecyerID"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"></android.support.v7.widget.RecyclerView>

</LinearLayout>
model.xml

Cette mise en page sera gonflée dans les éléments de vue pour notre RecyclerView.

Fondamentalement, une CardView pour chaque élément de RecyclerView.

Contient un simple TextView :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    android_id="@+id/mCard"
    android_orientation="horizontal"
    android_layout_width="match_parent"

    android_layout_margin="10dp"
    card_view_cardCornerRadius="10dp"
    card_view_cardElevation="10dp"

    android_layout_height="wrap_content">

    <RelativeLayout
        android_layout_width="match_parent"
        android_layout_height="match_parent">

        <TextView
            android_layout_width="wrap_content"
            android_layout_height="wrap_content"
            android_textAppearance="?android:attr/textAppearanceLarge"
            android_text="Name"
            android_id="@+id/nameTxt"
            android_padding="10dp"
            android_layout_alignParentLeft="true"
             />

    </RelativeLayout>
</android.support.v7.widget.CardView>

4. Créer des classes Java

Les applications Android sont écrites en langage de programmation Java, alors créons quelques classes.

1. MonDossier.java

Notre classe ViewHolder.

package com.tutorials.hp.dialogfragmentrecyclerview.mRecycler;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.tutorials.hp.dialogfragmentrecyclerview.R;

public class MyHolder extends RecyclerView.ViewHolder {

    TextView nameTxt;

    public MyHolder(View itemView) {
        super(itemView);
        nameTxt= (TextView) itemView.findViewById(R.id.nameTxt);
    }
}
2. MonAdaptateur.java

Notre classe d'adaptateur de vue recyclée :

package com.tutorials.hp.dialogfragmentrecyclerview.mRecycler;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.tutorials.hp.dialogfragmentrecyclerview.R;

public class MyAdapter extends RecyclerView.Adapter<MyHolder> {

    Context c;
    String[] tvshows;

    public MyAdapter(Context c, String[] tvshows) {
        this.c = c;
        this.tvshows = tvshows;
    }

    //INITIALIE VH
    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,parent,false);
        MyHolder holder=new MyHolder(v);
        return holder;
    }

    //BIND DATA
    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
       holder.nameTxt.setText(tvshows[position]);
    }

    @Override
    public int getItemCount() {
        return tvshows.length;
    }
}
TVShowFragment.java

Ceci est notre DialogFragment. Il dérive de android.app.DiloagFragment.

Cette classe va montrer notre RecyclerView :

package com.tutorials.hp.dialogfragmentrecyclerview;

import android.app.DialogFragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.tutorials.hp.dialogfragmentrecyclerview.mRecycler.MyAdapter;

public class TVShowFragment extends DialogFragment {

    String[] tvshows={"Crisis","Blindspot","BlackList","Game of Thrones","Gotham","Banshee"};
    RecyclerView rv;
    MyAdapter adapter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView=inflater.inflate(R.layout.fraglayout,container);

        //RECYCER
        rv= (RecyclerView) rootView.findViewById(R.id.mRecyerID);
        rv.setLayoutManager(new LinearLayoutManager(this.getActivity()));

        //ADAPTER
        adapter=new MyAdapter(this.getActivity(),tvshows);
        rv.setAdapter(adapter);

        this.getDialog().setTitle("TV Shows");

        return rootView;
    }
}

4. MainActivity.java

Notre MainActivity.
Elle contiendra un bouton qui, lorsqu'il sera cliqué, affichera notre DialogFragment :

package com.tutorials.hp.dialogfragmentrecyclerview;

import android.app.FragmentManager;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

         final FragmentManager fm=getFragmentManager();
        final  TVShowFragment tv=new TVShowFragment();

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              tv.show(fm,"TV_tag");
            }
        });
    }

}

Exemple 2 - Android DialogFragment - Recherche/Filtre ListView

L'idée des dialogues est géniale car nous pouvons les faire surgir de nulle part. L'utilisateur peut alors faire ce qu'il veut et quitter la boîte de dialogue.

Dans cet exemple, nous créons un segment de dialogue qui s'affiche lorsqu'un simple bouton est cliqué dans notre [activité] principale (https://camposha.info/android/activity).

Notre segment de dialogue contient une simple ListView et une SearchView. La ListView contiendra une liste de joueurs.

Le searchView peut alors être utilisé pour rechercher les joueurs dans la liste.

1. Notre classe MainActivity

C'est notre principale activité.

En tant que classe, c'est une [activité] (https://camposha.info/android/activity) puisqu'elle dérive de android.app.Activity.

Non. Responsabilité
1. C'est notre lanceur et notre seule activité.
Il contient un bouton qui, lorsqu'il est cliqué, affiche un segment de dialogue.
3. Il maintient un FragmentManager qui aide à l'affichage de notre fragment de dialogue.

package com.tutorials.dialogfragmenter;

import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

  Button btn;

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

        final FragmentManager fm=getFragmentManager();
        final PlayersFragment p=new PlayersFragment();

        btn=(Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View arg0) {
        // TODO Auto-generated method stub
        p.show(fm, "Best Players");
      }
    });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

2. Notre classe PlayerFragment.

Voici notre classe PlayerFragment.

No. Responsabilité
1. Dérive de android.app.DialogFragment, ce qui en fait un DialogFragment.
Nous allons référencer une ListView et une SearchView ici. ListView sera notre adaptateur tandis que nous utiliserons un searchView pour saisir nos termes de recherche.
3. Nous fermerons notre segment de dialogue lorsque nous cliquerons sur le bouton de fermeture.

package com.tutorials.dialogfragmenter;

import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;

public class PlayersFragment extends DialogFragment {

  Button btn;
  ListView lv;
  SearchView sv;
  ArrayAdapter<String> adapter;
  String[] players={"Lionel Messi","Christiano Ronaldo","Neymar","Gareth Bale"};

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View rootView=inflater.inflate(R.layout.sports, null);

    //SET TITLE DIALOG TITLE
    getDialog().setTitle("Best Players In The World");

    //BUTTON,LISTVIEW,SEARCHVIEW INITIALIZATIONS
    lv=(ListView) rootView.findViewById(R.id.listView1);
    sv=(SearchView) rootView.findViewById(R.id.searchView1);
    btn=(Button) rootView.findViewById(R.id.dismiss);

    //CREATE AND SET ADAPTER TO LISTVIEW
    adapter=new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,players);
    lv.setAdapter(adapter);

    //SEARCH
    sv.setQueryHint("Search..");
    sv.setOnQueryTextListener(new OnQueryTextListener() {

      @Override
      public boolean onQueryTextSubmit(String txt) {
        // TODO Auto-generated method stub
        return false;
      }

      @Override
      public boolean onQueryTextChange(String txt) {
        // TODO Auto-generated method stub

        adapter.getFilter().filter(txt);
        return false;
      }
    });

    //BUTTON
    btn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View arg0) {
        // TODO Auto-generated method stub
        dismiss();
      }
    });

    return rootView;
  }

}

3. Notre mise en page principale de l'activité

Voici la disposition de notre activité principale.

No. Responsabilité
Contient un bouton qui, lorsqu'il est cliqué, ouvre notre segment de dialogue.

<RelativeLayout

    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_paddingBottom="@dimen/activity_vertical_margin"
    android_paddingLeft="@dimen/activity_horizontal_margin"
    android_paddingRight="@dimen/activity_horizontal_margin"
    android_paddingTop="@dimen/activity_vertical_margin"
    tools_context=".MainActivity" >

    <Button
        android_id="@+id/button1"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentLeft="true"
        android_layout_alignParentTop="true"
        android_layout_marginLeft="97dp"
        android_layout_marginTop="163dp"
        android_text="Show" />

</RelativeLayout>

4. Notre PlayerFragment Layout

Voici le layout de notre DialogFragment.

Voici ses rôles :

No. Responsabilité
Définir un ListView qui affichera une liste d'éléments.
Définir une SearchView pour rechercher/filtrer nos données.
3. Définissez un bouton pour fermer notre fenêtre de dialogue.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android_layout_width="match_parent"
    android_layout_height="match_parent"
    android_orientation="vertical" >

    <SearchView
        android_id="@+id/searchView1"
        android_layout_width="match_parent"
        android_layout_height="wrap_content" >
    </SearchView>

    <ListView
        android_id="@+id/listView1"
        android_layout_width="match_parent"
        android_layout_height="326dp" >
    </ListView>

    <Button
        android_id="@+id/dismiss"
        android_layout_width="match_parent"
        android_layout_height="wrap_content"
        android_text="Dismiss" />

</LinearLayout>

Notre manifeste

Notre android manifest.xml. Notre activité est enregistrée ici.

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="com.tutorials.dialogfragmenter"
    android_versionCode="1"
    android_versionName="1.0" >

    <uses-sdk
        android_minSdkVersion="19"
        android_targetSdkVersion="19" />

    <application
        android_allowBackup="true"
        android_icon="@drawable/ic_launcher"
        android_label="@string/app_name"
        android_theme="@style/AppTheme" >
        <activity
            android_name="com.tutorials.dialogfragmenter.MainActivity"
            android_label="@string/app_name" >
            <intent-filter>
                <action android_name="android.intent.action.MAIN" />

                <category android_name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Catégorisé: