Der flexibelste Weg, einen Dialog zu erstellen, ist nicht die Verwendung der Klasse andorid.app.Dialog, sondern die Verwendung der Klasse DialogFragment. Dadurch erhalten Sie die volle Fragment-Fähigkeit, einschließlich der Fähigkeit, den Lebenszyklus des Dialogs zu beobachten und ViewModels zu verwenden.

Was ist ein DialogFragment?

Ein DialogFragment ist ein Fragment, das ein Dialogfenster anzeigt, das über dem Fenster seiner Aktivität schwebt. Dieses Fragment enthält ein Dialog-Objekt, das es je nach Zustand des Fragments anzeigt.

In dieser Klasse verwenden wir die Unterstützung dialogfragment, da das Framework android.app.dialogFragment in API Level 28 veraltet ist.

Unsere Implementierung wird diese Klasse außer Kraft setzen und
onCreateView(LayoutInflater, ViewGroup, Bundle), um den Inhalt des Dialogs bereitzustellen. Alternativ können wir onCreateDialog(Bundle) überschreiben, um ein völlig benutzerdefiniertes Dialogfeld, z. B. ein AlertDialog, mit eigenem Inhalt zu erstellen.

In diesem Artikel werden wir das Folgende lernen:

  1. Erstellen eines Dialogs mit ListView in kotlin.
  2. Die Verwendung von DialogFragment, um Dialoge mit benutzerdefiniertem Layout zu erstellen, wie z.B. AlertDialoge, Eingabedialoge etc.
  3. Erstellen von Popup-Menüs

(a). Kotlin Android DialogFragment mit ListView

Kotlin Android DialogFragment mit ListView tutorial.

Wir wollen sehen, wie man ein DialogFragment öffnet, wenn ein einfacher Button angeklickt wird. Das DialogFragment wird aus einem Titel und einer Listenansicht bestehen.

Wir füllen es mit Hilfe der Klasse LayoutInflater aus einer Xml-Layout-Spezifikation auf.

Wenn der Benutzer auf ein ListView-Element klickt, zeigen wir es in einem Toast an. Wenn der Benutzer außerhalb des DialogFragments klickt, schließen wir es (das DialogFragment).

Los geht's.

Video-Tutorial

Nun, wir haben ein Video-Tutorial als Alternative zu diesem hier. Wenn Sie Tutorials wie dieses bevorzugen, wäre es gut, wenn Sie unseren YouTube-Kanal abonnieren. Im Grunde haben wir ein TV für Programmierung, wo wir täglich Tutorials speziell für Android machen.

Kotlin Android DialogFragment mit einfacher ListView

Schauen wir uns ein komplettes Beispiel an.

Werkzeuge

  1. IDE: [Android Studio] (https://camposha.info/android/android-studio) - Androids offizielle Android-IDE, unterstützt von Jetbrains und Google.
  2. Sprache: Kotlin -Statically Typed Language, zuerst von Jetbrains entwickelt.
  3. Emulator : Nox Player - Ein Emulator, der schnell genug für meinen langsamen Rechner ist.

Gradle-Skripte

Wir beginnen mit der Erforschung unserer Gradle-Skripte.

(a). build.gradle(App)

Hier ist unsere Anwendungsebene build.gradle Datei. Wir haben die Abhängigkeiten-DSL, wo wir unsere Abhängigkeiten hinzufügen.

Diese Datei wird app level build.gradle genannt, da sie sich im app Ordner des Projekts befindet.

Wenn Sie Android Studio Version 3 und höher verwenden, benutzen Sie das Schlüsselwort implementation, wenn Sie eine Version unter 3 verwenden, benutzen Sie das Schlüsselwort compile.

Sobald Sie diese Datei build.gradle geändert haben, müssen Sie Ihr Projekt synchronisieren. Android Studio wird Sie tatsächlich dazu auffordern.

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'
}

Sie können auch sehen, dass wir damit begonnen haben, zwei kotlin-spezifische Plugins in unserer build.gradle-Datei anzuwenden:

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

Das sind kotlin-android und kotlin-android-extensions.

Kotlin-Code

Android-Apps können hauptsächlich in Java oder Kotlin geschrieben werden. Heutzutage gibt es jedoch viele Frameworks wie Flutter, die auch Sprachen wie Dart verwenden.

In diesem Kurs verwenden wir die Programmiersprache Kotlin.

Wir werden diese Klassen in unserem Projekt verwenden.

(a). PioneersFragment.kt

Stellt unseren FragmentDialog dar und wird in der Tat von ihm abgeleitet.

1. Erstellen eines DialogFragments

Wir beginnen mit der Erstellung einer Kotlin-Klasse, die von android.support.v4.app.DialogFragment ableitet. Wir verwenden die Support-Bibliothek fragment, da android.app.DialogFragment veraltet ist.

class PioneersFragment : DialogFragment() {..}

Beachten Sie, dass die obige Anweisung einen leeren Standardkonstruktor für unser DialogFragment enthält. Wir tun dies unter Verwendung der Klammern (()) in Kotlin.

2. OnCreateView() von DialogFragment überschreiben

Anschließend überschreiben wir die Methode onCreateView() der Klasse Fragment.

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

Wir haben drei Parameter übergeben:

  1. LayoutInflater-Objekt.
  2. ViewGroup-Objekt.
  3. Bundle-Objekt.

3. Aufblasen eines Layouts in ein DialogFragment

Innerhalb der Methode blasen wir zunächst das R.layout.fraglayout-Layout über die Methode inflate auf, indem wir die Instanz LayoutInflater verwenden.

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

4. Erstellen eines Kotlin-Arrays

Anschließend erstellen wir ein Kotlin-Array mit der Methode arrayOf(). Dieses wird als unsere Datenquelle für die Pioniere dienen. Dies werden wir an die ListView binden, die wir in unserem DialogFragment anzeigen werden.

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

5. Binden einer ListView an ein Kotlin Array mittels ArrayAdapter

Dann verweisen wir auf unsere ListView und setzen ihren Adapter. Wir werden arrayadapter verwenden.

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

6. Setzen eines DialogFragment Titels

Wir setzen den Titel des DialogFragments mit der Methode setTitle(), Sie übergeben einen String an diese Methode.

        this.dialog.setTitle("Tech Pioneers")

7. Listening to ListView's Click events in Kotlin

Nehmen wir an, wir wollen eine Toast-Nachricht anzeigen, wenn eine ListView angeklickt wird, die das angeklickte Element anzeigt:

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

Hier ist der vollständige Code der Klasse 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

Dies ist unsere MainActivity. Sie wird eine Schaltfläche enthalten, die, wenn sie angeklickt wird, unser DialogFragment zeigt oder öffnet.

1. Erstellen einer Activity in Kotlin

Du erstellst einfach eine Klasse, gibst ihr einen Bezeichner und lässt sie von android.support.v7.app.AppCompatActivity ableiten:

class MainActivity : AppCompatActivity() {..}

2. Überschreiben Sie die onCreate()-Methode der Activity

Die Methode "onCreate()" ist eine Methode, die ausgelöst wird, wenn unsere Aktivität erstellt wird.

Hier rufen wir die Methode onCreate() der super class auf. Dann verwenden wir die Methode setContentView(), um unsere activity_main.xml aufzublasen:

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

3. Widgets in Kotlin referenzieren

Man kann Widgets aus ihrem jeweiligen Layout referenzieren, indem man die Methode findViewById() der activity verwendet.

So wie wir es mit unserem Button machen.

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

4. Abrufen des FragmentManagers einer Activity

Fragmente werden von Aktivitäten gehostet. Daher unterhält eine Activity einen supportFragmentManager als Eigenschaft.

Wir können ihn auf diese Weise erhalten:

        val fm = supportFragmentManager

5. Öffnen/Anzeigen eines Fragments

Wir können ein Fragment öffnen oder es anzeigen. Aber zuerst müssen wir das Fragment instanziieren:

        val pioneersFragment = PioneersFragment()

Dann können wir es öffnen, wenn der Benutzer auf eine Schaltfläche klickt, indem wir die Methode show() der Klasse Fragment aufrufen:


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

Hier ist der vollständige Code der 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

Layout-Ressourcen

(a). activity_main.xml

Dies ist das Layout unserer Hauptaktivität. Es wird unseren Button enthalten, der, wenn er angeklickt wird, unser DialogFragment öffnet.

Dieses Layout wird in die Benutzeroberfläche der Hauptaktivität aufgeblasen. Dies geschieht über die Methode setContentView() der Activity, die es erfordert, dass wir das Layout übergeben.

Wir werden dies innerhalb der onCreate() Methode von Activity tun.

Wir verwenden die folgenden Elemente:

  1. RelativeLayout
  2. Schaltfläche

<?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

Unser DialogFragment-Layout. Dieses Layout wird in die Benutzeroberfläche für unser Dialog Fragment aufgeblasen.

Es wird eine einfache ListView enthalten.

<?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>

Wert-Ressourcen

(a). colors.xml

Unsere Material Design Farben:

<?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

Der Stil unserer Anwendung.

<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 - RecyclerView anzeigen

Dieses Beispiel zeigt eine RecyclerView in diaogfragment.

Wenn der Benutzer auf einen Show-Button klickt, öffnen wir ein Dialogfragment und zeigen eine RecyclerView darin an.

Projektzusammenfassung

Nr. Datei Hauptverantwortung
1. MyHolder.java RecyclerView ViewHolder Klasse.
2. MyAdapter.java RecyclerView Datenadapterklasse
3. TVShowFragment.java DialogFragment Klasse
4. MainActivity.java Aktivitätsklasse
5. activity_layout.xml Soll auf MainActivity aufgeblasen werden
6. content_main.xml Wird in die activity_main.xml eingefügt. Hier fügen wir unsere Vektoren und Widgets ein.
7. fraglayout.xml Das Layout, das in unser benutzerdefiniertes DialogFragment aufgeblasen wird.
8. model.xml Um zu modellieren, wie jedes Recyclerview-Element erscheinen wird

1. Basic Activity Projekt erstellen

  1. Erstellen Sie zunächst ein leeres Projekt in android studio. Gehen Sie zu File --> New Project.
  2. Geben Sie den Anwendungsnamen ein und wählen Sie den Firmennamen.
  3. Wählen Sie Minimum SDK.
  4. Wählen Sie Basic Aktivität.
  5. Klicken Sie auf Fertigstellen.

Basic activity hat bereits eine Symbolleiste und eine schwebende Aktionsschaltfläche im Layout hinzugefügt

Normalerweise werden mit dieser Option zwei Layouts erstellt:

Nr. Name Typ Beschreibung
1. activity_main.xml XML-Layout Wird in das MainActivity-Layout aufgeblasen, das typischerweise ein Appbar-Layout mit einer Symbolleiste und einem schwebenden Aktionsbutton enthält.
2. content_main.xml XML-Layout Wird in activity_main.xml eingebunden.Hier fügen Sie Ihre Ansichten und Widgets hinzu.
3. MainActivity.java Klasse Hauptaktivität.

In diesem Beispiel habe ich eine einfache Activity verwendet.

Die "Activity" wird automatisch in der android_manifest.xml registriert. Android Activities sind Komponenten und müssen normalerweise als Anwendungskomponente registriert werden.

Wenn Sie Ihre manuell erstellt haben, dann registrieren Sie sie innerhalb der <Anwendung>...<Anwendung> wie folgt, wobei Sie die MainActivity durch Ihren Activity-Namen ersetzen:


        <activity android_name=".MainActivity">

            <intent-filter>

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

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

            </intent-filter>

        </activity>

Sie können sehen, dass eine Aktion und eine Kategorie als Absichtsfilter angegeben sind. Die Kategorie macht unsere MainActivity zu einer Launcher-Activity. Launcher-Aktivitäten werden zuerst ausgeführt, wenn die Android-App gestartet wird.

3. Benutzeroberfläche erstellen

Hier sind unsere Layouts für dieses Projekt:

activity_main.xml

  • Dieses Layout wird in die MainActivity-Benutzeroberfläche aufgeblasen.
  • Es enthält die Datei content_main.xml.

Hier sind einige der Widgets, Ansichten und Viewgroups, die verwendet werden"

No. View/ViewGroup Package Role
1. CordinatorLayout android.support.design.widget Super-powered framelayout, das unsere Anwendung auf oberster Ebene dekoriert und auch die Interaktionen und Verhaltensweisen aller seiner Kinder festlegt.
2. AppBarLayout android.support.design.widget Ein untergeordnetes LinearLayout, das seine Kinder vertikal anordnet und Material Design App Bar-Konzepte wie Scroll-Gesten bereitstellt.
3. ToolBar <android.support.v7.widget Eine ViewGroup, die Actionbar-Funktionen bietet und dennoch innerhalb von Anwendungslayouts verwendet werden kann.
4. FloatingActionButton android.support.design.widget Eine kreisförmige Bildansicht, die über der Benutzeroberfläche schwebt und als Schaltfläche verwendet werden kann.

<?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>

content_main.xml

Dieses Layout wird in Ihre activity_main.xml aufgenommen.
Du definierst deine UI-Widgets genau hier.

<?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

Dieses Layout wird zu unserem DialogFragment aufgeblasen.

Es wird unsere RecyclerView als unsere Adapterview enthalten:

<?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

Dieses Layout wird zu den View-Elementen für unseren RecyclerView aufgeblasen.

Im Grunde genommen eine CardView für jedes RecyclerView Element.

Enthält einen einfachen 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. Java-Klassen erstellen

Android-Apps werden in der Programmiersprache Java geschrieben, also erstellen wir einige Klassen.

1. MyHolder.java

Unsere ViewHolder-Klasse.

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. MyAdapter.java

Unsere Recyclerview-Adapterklasse:

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

Dies ist unser DialogFragment. Es leitet sich von android.app.DiloagFragment ab.

Diese Klasse wird unser RecyclerView anzeigen:

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

Unsere MainActivity.
Sie wird eine Schaltfläche enthalten, die, wenn sie angeklickt wird, unser DialogFragment zeigt:

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");
            }
        });
    }

}

Beispiel 2 - Android DialogFragment - ListView Suche/Filter

Die Idee der Dialoge ist großartig, weil wir sie aus dem Nichts auftauchen lassen können. Der Benutzer kann dann sein Ding machen und den Dialog wieder schließen.

In diesem Beispiel erstellen wir ein Dialogfragment, das angezeigt wird, wenn eine einfache Schaltfläche in unserer Haupt-[Aktivität] (https://camposha.info/android/activity) angeklickt wird.

Unser Dialogfragment wird eine einfache ListView und eine SearchView enthalten. Die ListView wird eine Liste der Spieler enthalten.

Die Suchansicht kann dann verwendet werden, um die Spieler in der Liste zu suchen.

1. Unsere MainActivity-Klasse

Dies ist unsere Hauptaktivität.

Als Klasse ist sie eine activity, da sie sich von android.app.Activity ableitet.

No. Verantwortung
1. Es ist unser Launcher und die einzige Activity.
2. Sie enthält eine Schaltfläche, die, wenn sie angeklickt wird, ein Dialogfragment anzeigt.
3. Sie verwaltet einen FragmentManager, der bei der Anzeige unseres Dialogfragments hilft.

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. Unsere PlayerFragment-Klasse.

Dies ist unsere PlayerFragment-Klasse.

Nr. Verantwortung
1. Leitet sich von android.app.DialogFragment ab und ist somit ein DialogFragment.
2. Wir referenzieren hier eine ListView und eine SearchView. ListView wird unsere Adapterview sein, während wir eine Searchview für die Eingabe unserer Suchbegriffe verwenden werden.
3. Wir werden unser Dialogfragment schließen, wenn die Schaltfläche "Schließen" angeklickt wird.

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. Unser MainActivity-Layout

Dies ist unser Hauptlayout für die "Aktivität".

No. Verantwortung
1. Enthält eine Schaltfläche, die, wenn sie angeklickt wird, unser Dialogfragment öffnet.

<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. UNSER PlayerFragment-Layout

Dies ist das Layout unseres DialogFragments.

Hier sind seine Rollen:

No. Verantwortung
1. Definieren Sie eine ListView, die eine Liste von Elementen anzeigt.
2. Definieren Sie eine SearchView zum Suchen/Filtern unserer Daten.
3. Definieren Sie eine Schaltfläche zum Verlassen unseres Dialogfragments.

<?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>

Unser Manifest

Unser android manifest.xml. Hier wird unsere Aktivität registriert.

<?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>

Categorized in: