<p>This article is about Android DialogFragment and how to work with it with the help of simple examples.</p> 
<h4><strong><span style="color: #000080;">Android DialogFragment</span> </strong></h4> 
<p>A <strong><span style="color: #008000;">Dialog Fragment</span> </strong>is a fragment that is used to make Dialogs that floats on Activity.</p> 
 
<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-block-buttons-is-layout-flex"> 
<div class="wp-block-button"><a class="wp-block-button__link has-white-color has-text-color has-background" style="background-color: #520599;" href="https://github.com/arunk7839/AndroidDialogFragmentExample" target="_blank" rel="noreferrer noopener"><strong>DOWNLOAD CODE</strong></a></div> 
</div> 
 
 
 
<h4 class="wp-block-heading"> </h4> 
<p><span class="embed-youtube" style="text-align:center; display: block;"><amp-youtube data-videoid="uz3TBr7HxsM" data-param-rel="1" data-param-showsearch="0" data-param-showinfo="1" data-param-iv_load_policy="1" data-param-fs="1" data-param-hl="en-US" data-param-autohide="2" data-param-wmode="transparent" width="1200" height="675" layout="responsive"><a href="https://www.youtube.com/watch?v=uz3TBr7HxsM" placeholder><amp-img src="https://i.ytimg.com/vi/uz3TBr7HxsM/hqdefault.jpg" alt="YouTube Poster" layout="fill" object-fit="cover"><noscript><img src="https://i.ytimg.com/vi/uz3TBr7HxsM/hqdefault.jpg" loading="lazy" decoding="async" alt="YouTube Poster"></noscript></amp-img></a></amp-youtube></span></p> 
<h4><span style="color: #000080;"><strong>Android DialogFragment</strong></span></h4> 
 
 
 
<p>A <span style="color: #008000;"><strong>DialogFragment </strong></span>is a fragment that is used to make Dialogs that floats on Activity.</p> 
 
 
 
<p>DialogFragment extends the <span style="color: #008000;"><strong>Fragment</strong></span> class. All the information regarding the Dialog or the data associated with the Dialog will be stored or managed in the Fragment only. </p> 
 
 
 
<p>Since DialogFragment is associated with Fragment, so it has its own LifeCycle and now the Activity need not manage the lifecycle of Dialogs. Due to this reason, <span style="color: #008000;"><strong>DialogFragments are recommended to be used while implementing Alert Dialog or any other type of Dialog in Android.</strong></span></p> 
 
 
 
<h4 class="p1 wp-block-heading"><span class="s1" style="color: #000080;"><b>DialogFragment lifecycle</b></span></h4> 
 
 
 
<p class="p2">A <span class="s1">DialogFragment</span> follows the standard fragment lifecycle. In addition, <span class="s1">DialogFragment</span> has a few additional lifecycle callbacks. The most common ones are as follows:</p> 
 
 
 
<ul class="ul1 wp-block-list"> 
<li class="li2"><span class="s2"><a href="https://developer.android.com/reference/androidx/fragment/app/DialogFragment#onCreateDialog(android.os.Bundle)"><span class="s3"><span style="color: #0000ff;"><strong>onCreateDialog()</strong></span></span></a></span> &#8211; Override this callback to provide a <span class="s1">Dialog</span> for the fragment to manage and display.</li> 
<li class="li2"><strong><span class="s2" style="color: #0000ff;"><a style="color: #0000ff;" href="https://developer.android.com/reference/androidx/fragment/app/DialogFragment#onDismiss(android.content.DialogInterface)"><span class="s3">onDismiss()</span></a></span></strong> &#8211; Override this callback if you need to perform any custom logic when your <span class="s1">Dialog</span> is dismissed, such as releasing resources, unsubscribing from observable resources, and so on.</li> 
<li class="li2"><strong><span class="s2" style="color: #0000ff;"><a style="color: #0000ff;" href="https://developer.android.com/reference/androidx/fragment/app/DialogFragment#onCancel(android.content.DialogInterface)"><span class="s3">onCancel()</span></a></span></strong> &#8211; Override this callback if you need to perform any custom logic when your <span class="s1">Dialog</span> is cancelled.</li> 
</ul> 
 
 
 
<p class="p2"><span class="s1">DialogFragment</span> also contains methods to dismiss or set the cancellability of your <span class="s1">DialogFragment</span>:</p> 
 
 
 
<ul class="ul1 wp-block-list"> 
<li class="li2"><strong><span class="s2" style="color: #0000ff;"><a style="color: #0000ff;" href="https://developer.android.com/reference/androidx/fragment/app/DialogFragment#dismiss()"><span class="s3">dismiss()</span></a></span></strong> &#8211; Dismiss the fragment and its dialog. </li> 
<li class="li2"><strong><span style="color: #0000ff;"><span class="s2"><a style="color: #0000ff;" href="https://developer.android.com/reference/androidx/fragment/app/DialogFragment#setCancelable(boolean)"><span class="s3">setCancellable()</span></a></span> </span></strong>&#8211; Control whether the shown <span class="s1">Dialog</span> is cancelable. This method should be used instead of directly calling <strong><span style="color: #0000ff;"><a style="color: #0000ff;" href="https://developer.android.com/reference/android/app/Dialog#setCancelable(boolean)"><span class="s4">Dialog.setCancelable(boolean)</span></a>.</span></strong></li> 
</ul> 
 
 
 
<h4 class="wp-block-heading"><span style="color: #000080;"><strong>Steps of creating custom Dialog</strong></span></h4> 
 
 
 
<p>To create a dialog fragment of our own follows the below steps:</p> 
 
 
 
<ul class="wp-block-list"> 
<li>Create a Kotlin/Java file for your Dialog Fragment. For example, <span style="color: #0000ff;"><strong>MyDialog.kt</strong></span> and this class will extend the <span style="color: #0000ff;"><strong>DialogFragment</strong></span>. Here in this class, override all the methods related to dialog.</li> 
<li>Create the layout file of the dialog. </li> 
<li>Call your custom dialog from your Activity.</li> 
</ul> 
 
 
 
<h4 class="wp-block-heading"><span style="color: #000080;"><strong>Creating new project</strong></span></h4> 
 
 
 
<p>1. Create a new project by going to <span style="color: #008000;"><b>File </b><span class="s1"><b>⇒</b></span></span><b><span style="color: #008000;"> New Android Project</span>,</b> select <span style="color: #008000;"><strong>Empty Activity</strong></span>, provide <span style="color: #008000;"><strong>app name</strong>,</span> select language to <strong><span style="color: #008000;">kotlin</span> </strong>and then finally click on <span style="color: #0000ff;"><strong>finish</strong></span>.</p> 
 
 
 
<p>2. Open app-level <strong><span style="color: #008000;">build.gradle</span></strong> file and add the dependency of <span style="color: #0000ff;"><strong>Livedata</strong></span> and <span style="color: #0000ff;"><strong>ViewModel</strong></span>.</p> 
 
 
 
<pre class="wp-block-preformatted">dependencies {<br /><span style="color: #0000ff;"><strong> //viewmodel and livedata dependency</strong></span><br /> <strong><span style="color: #008000;"> implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"</span></strong><br /><strong><span style="color: #008000;"> implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"</span></strong><br />}</pre> 
 
 
 
<h4 class="wp-block-heading"><span style="color: #000080;"><strong>Creating Custom Dialog Example</strong></span></h4> 
 
 
 
<p>1 . Create a layout file named <strong><span style="color: #008000;">fragment_custom_dialog.xm</span>l</strong> which represents the UI of the custom dialog. It consists of a title, a subtitle, and two buttons (for positive and negative responses).</p> 
 
 
 
<p><span style="color: #0000ff;"><strong>fragment_custom_dialog.xml</strong></span></p> 
 
 
 
<pre class="wp-block-preformatted"><;?xml version="1.0" encoding="utf-8"?>;<br /><;androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> xmlns:app="http://schemas.android.com/apk/res-auto"<br /> android:layout_width="match_parent"<br /> android:layout_height="wrap_content"<br /> android:padding="12dp">;<br /><br /> <;androidx.appcompat.widget.AppCompatTextView<br /> android:id="@+id/tvTitle"<br /> android:layout_width="match_parent"<br /> android:layout_height="wrap_content"<br /> android:textSize="24sp"<br /> android:textColor="@android:color/black"<br /> android:textStyle="bold"<br /> app:layout_constraintEnd_toEndOf="parent"<br /> app:layout_constraintStart_toStartOf="parent"<br /> app:layout_constraintTop_toTopOf="parent" />;<br /><br /> <;androidx.appcompat.widget.AppCompatTextView<br /> android:id="@+id/tvSubTitle"<br /> android:layout_width="match_parent"<br /> android:layout_height="wrap_content"<br /> android:layout_marginTop="12dp"<br /> android:textColor="@android:color/black"<br /> android:textSize="20sp"<br /> app:layout_constraintEnd_toEndOf="parent"<br /> app:layout_constraintStart_toStartOf="parent"<br /> app:layout_constraintTop_toBottomOf="@id/tvTitle" />;<br /><br /> <;androidx.appcompat.widget.AppCompatButton<br /> android:id="@+id/btnPositive"<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:layout_marginTop="16dp"<br /> android:text="OK"<br /> app:layout_constraintBottom_toBottomOf="parent"<br /> app:layout_constraintEnd_toEndOf="parent"<br /> app:layout_constraintTop_toBottomOf="@+id/tvSubTitle" />;<br /><br /> <;androidx.appcompat.widget.AppCompatButton<br /> android:id="@+id/btnNegative"<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:layout_marginTop="16dp"<br /> android:text="CANCEL"<br /> app:layout_constraintBottom_toBottomOf="parent"<br /> app:layout_constraintEnd_toStartOf="@id/btnPositive"<br /> app:layout_constraintTop_toBottomOf="@+id/tvSubTitle" />;<br /><br /><;/androidx.constraintlayout.widget.ConstraintLayout>;</pre> 
 
 
 
<p>2. Create a <strong><span style="color: #008000;">CustomDialogFragment</span></strong> class (subclass of DialogFragment) under the root directory, <strong>right-click >; New >; Kotlin File/Class</strong>.</p> 
 
 
 
<p><span style="color: #0000ff;"><strong>CustomDialogFragment.kt</strong></span></p> 
 
 
 
<pre class="wp-block-preformatted">package com.c1ctech.dialogfragmentdemo<br /><br />import android.os.Bundle<br />import android.view.LayoutInflater<br />import android.view.View<br />import android.view.ViewGroup<br />import android.view.WindowManager<br />import androidx.fragment.app.DialogFragment<br />import kotlinx.android.synthetic.main.fragment_custom_dialog.view.*<br /><br />class CustomDialogFragment : DialogFragment() {<br /><br /> companion object {<br /><br /> const val TAG = "CustomDialogFragment"<br /><br /> private const val KEY_TITLE = "KEY_TITLE"<br /> private const val KEY_SUBTITLE = "KEY_SUBTITLE"<br /><br /><span style="color: #008000;"><strong> //take the title and subtitle form the Activity</strong></span><br /> fun newInstance(title: String, subTitle: String): CustomDialogFragment {<br /> val args = Bundle()<br /> args.putString(KEY_TITLE, title)<br /> args.putString(KEY_SUBTITLE, subTitle)<br /> val fragment = CustomDialogFragment()<br /> fragment.arguments = args<br /> return fragment<br /> }<br /><br /> }<br /><br /><strong><span style="color: #008000;"> //creating the Dialog Fragment.</span></strong><br /> override fun onCreateView(<br /> inflater: LayoutInflater,<br /> container: ViewGroup?,<br /> savedInstanceState: Bundle?<br /> ): View? {<br /> return inflater.inflate(R.layout.fragment_custom_dialog, container, false)<br /> }<br /><br /><strong><span style="color: #008000;"> //tasks that need to be done after the creation of Dialog</span></strong><br /> override fun onViewCreated(view: View, savedInstanceState: Bundle?) {<br /> super.onViewCreated(view, savedInstanceState)<br /> setupView(view)<br /> setupClickListeners(view)<br /> }<br /><br /> override fun onStart() {<br /> super.onStart()<br /> dialog?.window?.setLayout(<br /> WindowManager.LayoutParams.MATCH_PARENT,<br /> WindowManager.LayoutParams.WRAP_CONTENT<br /> )<br /> }<br /><br /><strong><span style="color: #008000;"> //setting the text in CustomDialog</span></strong><br /> private fun setupView(view: View) {<br /><br /> view.tvTitle.text = arguments?.getString(KEY_TITLE)<br /> view.tvSubTitle.text = arguments?.getString(KEY_SUBTITLE)<br /> }<br /><br /><strong><span style="color: #008000;"> //setting all the click listeners of the CustomDialog</span></strong><br /> private fun setupClickListeners(view: View) {<br /><br /><span style="color: #008000;"><strong> // On clicking the positive/negative button,</strong></span><br /><span style="color: #008000;"><strong> // the dialog will be closed with the help of dismiss()</strong></span><br /> view.btnPositive.setOnClickListener {<br /> dismiss()<br /> }<br /> view.btnNegative.setOnClickListener {<br /> dismiss()<br /> }<br /> }<br />}</pre> 
 
 
 
<p>3. Now, from the MainActivity, we will open the custom Dialog on button click. </p> 
 
 
 
<p><span style="color: #0000ff;"><strong>MainActivity.kt</strong></span></p> 
 
 
 
<pre class="wp-block-preformatted">btnCustomDialog.setOnClickListener {<br /> CustomDialogFragment.newInstance(<br /> getString(R.string.custom_dialog_title),<br /> getString(R.string.custom_dialog_subTitle)<br /> ).show(supportFragmentManager, CustomDialogFragment.TAG)<br />}</pre> 
 
 
 
<p>Run the app. On click of <span style="color: #0000ff;"><strong>Custom Dialog Fragment</strong></span> button the custom dialog will appear like this:</p> 
 
 
 
<h4 class="wp-block-heading"><img class="alignnone wp-image-2685" src="https://c1ctech.com/wp-content/uploads/2021/07/Screenshot_1626279519-576x1024.png" alt="" width="386" height="687" /></h4> 
 
 
 
<h4 class="wp-block-heading"> </h4> 
 
 
 
<h4 class="wp-block-heading"><span style="color: #000080;"><strong>Creating an Alert Dialog Example</strong></span></h4> 
 
 
 
<p class="p1">If you want to use the AlertDialog provided by Android instead of your own custom dialog, then you have to override the <span style="color: #0000ff;"><strong>onCreateDialog</strong></span> method and create your AlertDialog there. </p>
<!-- WP QUADS Content Ad Plugin v. 2.0.98.1 -->
<div class="quads-location quads-ad2" id="quads-ad2" style="float:none;margin:0px;">

</div>
 
 
 
 
<p><strong><span style="color: #0000ff;">Note:</span></strong> No need to override <strong><span style="color: #0000ff;"><a style="color: #0000ff;" href="https://developer.android.com/reference/androidx/fragment/app/Fragment#oncreateview"><span class="s4">onCreateView()</span></a></span></strong> or <strong><span style="color: #0000ff;"><a style="color: #0000ff;" href="https://developer.android.com/reference/androidx/fragment/app/Fragment#onViewCreated(android.view.View,%20android.os.Bundle)"><span class="s4">onViewCreated()</span></a></span></strong> when using a <span class="s1">DialogFragment</span> with a <span class="s1">Dialog(provided by Android)</span>.</p> 
 
 
 
<p>1. Create the AlertDialogFragment class <span style="color: #008000;"><strong>(under the root directory, right-click >; New >; Kotlin File/Class)</strong></span>. </p> 
 
 
 
<p><span style="color: #0000ff;"><strong>AlertDialogFragment.kt</strong></span></p> 
 
 
 
<pre class="wp-block-preformatted">package com.c1ctech.dialogfragmentdemo<br /><br />import android.app.Dialog<br />import android.content.DialogInterface<br />import android.os.Bundle<br />import androidx.appcompat.app.AlertDialog<br />import androidx.fragment.app.DialogFragment<br /><br />class AlertDialogFragment : DialogFragment() {<br /><br /> companion object {<br /> const val TAG = "AlertDialogFragment"<br /><br /><strong><span style="color: #008000;"> //create fragment instance</span></strong><br /> fun newInstance(): AlertDialogFragment {<br /> val fragment = AlertDialogFragment()<br /> return fragment<br /> }<br /> }<br /><br /><strong><span style="color: #008000;"> //creating the AlertDialog</span></strong><br /> override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {<br /> val builder = activity?.let { AlertDialog.Builder(it) }<br /> builder?.setTitle(R.string.alert_dialog_title)<br /> builder?.setMessage(R.string.alert_dialog_subTitle)<br /> builder?.setPositiveButton("Yes", object : DialogInterface.OnClickListener {<br /> override fun onClick(dialog: DialogInterface, which: Int) {<br /> dismiss()<br /> }<br /> })<br /> builder?.setNegativeButton("No", object : DialogInterface.OnClickListener {<br /> override fun onClick(dialog: DialogInterface, which: Int) {<br /> dismiss()<br /> }<br /> })<br /> return builder?.create()!!<br /> }<br />}</pre> 
 
 
 
<p>Run the app. On click of <span style="color: #0000ff;"><strong>Alert Dialog Fragment</strong></span> button the Alertdialog will appear on the screen like this:</p> 
 
 
 
<h4 class="wp-block-heading"><img class="alignnone wp-image-2686" src="https://c1ctech.com/wp-content/uploads/2021/07/Screenshot_1626279513-576x1024.png" alt="" width="372" height="662" /></h4> 
 
 
 
<h4 class="wp-block-heading"> </h4> 
 
 
 
<h4 class="wp-block-heading"><span style="color: #000080;"><strong>Creating Dialog containing data shared with Activity/Fragment Example</strong></span></h4> 
 
 
 
<p class="p1">In this example, we have one EditText in the DialogFragment and a button. On clicking the button, the text in the EditText will be displayed on the MainActivity.</p> 
 
 
 
<p>1. The layout file <span style="color: #008000;"><strong>fragment_dialog_with_data.xml</strong></span> represents the UI of the dialog. It consists of one TextView, one EditText, and a Button.</p> 
 
 
 
<p><span style="color: #0000ff;"><strong>fragment_dialog_with_data.xml</strong></span></p> 
 
 
 
<pre class="wp-block-preformatted"><;?xml version="1.0" encoding="utf-8"?>;<br /><;androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> xmlns:app="http://schemas.android.com/apk/res-auto"<br /> android:layout_width="match_parent"<br /> android:layout_height="wrap_content"<br /> android:padding="12dp">;<br /><br /> <;androidx.appcompat.widget.AppCompatTextView<br /> android:id="@+id/tv_title"<br /> android:layout_width="0dp"<br /> android:layout_height="wrap_content"<br /> android:text="Enter your details"<br /> android:textAlignment="center"<br /> android:textSize="24sp"<br /> app:layout_constraintEnd_toEndOf="parent"<br /> app:layout_constraintStart_toStartOf="parent"<br /> app:layout_constraintTop_toTopOf="parent" />;<br /><br /> <;androidx.appcompat.widget.AppCompatEditText<br /> android:id="@+id/etName"<br /> android:layout_width="0dp"<br /> android:layout_height="wrap_content"<br /> android:layout_marginTop="12dp"<br /> android:hint="Enter your name"<br /> android:textSize="16sp"<br /> app:layout_constraintEnd_toEndOf="parent"<br /> app:layout_constraintStart_toStartOf="parent"<br /> app:layout_constraintTop_toBottomOf="@+id/tv_title" />;<br /><br /> <;androidx.appcompat.widget.AppCompatButton<br /> android:id="@+id/btnSubmit"<br /> android:layout_width="0dp"<br /> android:layout_height="48dp"<br /> android:layout_marginTop="16dp"<br /> android:text="Submit"<br /> app:layout_constraintEnd_toEndOf="parent"<br /> app:layout_constraintStart_toStartOf="parent"<br /> app:layout_constraintTop_toBottomOf="@+id/etName" />;<br /><br /><;/androidx.constraintlayout.widget.ConstraintLayout>;</pre> 
 
 
 
<p><strong><span style="color: #0000ff;">NOTE: Don&#8217;t forget to add the dependency of LiveData and ViewModel.</span></strong></p> 
 
 
 
<p>2. In the <strong><span style="color: #008000;">activity_main.xml</span></strong> file, we need to add one button and one text view for displaying the name. </p> 
 
 
 
<p><span style="color: #0000ff;"><strong>activity_main.xml</strong> </span></p> 
 
 
 
<pre class="wp-block-preformatted"><;?xml version="1.0" encoding="utf-8"?>;<br /><;androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> xmlns:app="http://schemas.android.com/apk/res-auto"<br /> xmlns:tools="http://schemas.android.com/tools"<br /> android:layout_width="match_parent"<br /> android:layout_height="match_parent"<br /> tools:context=".MainActivity">;<br /><br /> <;androidx.appcompat.widget.AppCompatButton<br /> android:id="@+id/btnAlertDialog"<br /> android:layout_width="match_parent"<br /> android:layout_height="48dp"<br /> android:layout_margin="12dp"<br /> android:text="@string/btn_AlertDialog"<br /> android:textAllCaps="false"<br /> app:layout_constraintEnd_toEndOf="parent"<br /> app:layout_constraintStart_toStartOf="parent"<br /> app:layout_constraintTop_toTopOf="parent" />;<br /><br /> <;androidx.appcompat.widget.AppCompatButton<br /> android:id="@+id/btnCustomDialog"<br /> android:layout_width="match_parent"<br /> android:layout_height="48dp"<br /> android:layout_margin="12dp"<br /> android:text="@string/btn_Custom_Dialog"<br /> android:textAllCaps="false"<br /> app:layout_constraintEnd_toEndOf="@+id/btnAlertDialog"<br /> app:layout_constraintStart_toStartOf="@+id/btnAlertDialog"<br /> app:layout_constraintTop_toBottomOf="@+id/btnAlertDialog" />;<br /><br /> <strong><;androidx.appcompat.widget.AppCompatButton</strong><br /><strong> android:id="@+id/btnDataDialog"</strong><br /><strong> android:layout_width="match_parent"</strong><br /><strong> android:layout_height="48dp"</strong><br /><strong> android:layout_margin="12dp"</strong><br /><strong> android:text="@string/btn_Dialog_with_data"</strong><br /><strong> android:textAllCaps="false"</strong><br /><strong> app:layout_constraintEnd_toEndOf="@+id/btnCustomDialog"</strong><br /><strong> app:layout_constraintStart_toStartOf="@+id/btnCustomDialog"</strong><br /><strong> app:layout_constraintTop_toBottomOf="@+id/btnCustomDialog" />;</strong><br /><br /><strong> <;androidx.appcompat.widget.AppCompatTextView</strong><br /><strong> android:id="@+id/tvName"</strong><br /><strong> android:layout_width="match_parent"</strong><br /><strong> android:layout_height="wrap_content"</strong><br /><strong> android:layout_margin="12dp"</strong><br /><strong> android:textSize="18sp"</strong><br /><strong> android:textStyle="bold"</strong><br /><strong> android:textColor="@android:color/holo_red_dark"</strong><br /><strong> app:layout_constraintEnd_toEndOf="@+id/btnDataDialog"</strong><br /><strong> app:layout_constraintStart_toStartOf="@+id/btnDataDialog"</strong><br /><strong> app:layout_constraintTop_toBottomOf="@+id/btnDataDialog" />;</strong><br /><br /><;/androidx.constraintlayout.widget.ConstraintLayout>;</pre> 
 
 
 
<p class="p1">3. Create a class named <span style="color: #008000;"><strong>SharedViewModel</strong></span> and add the below code.</p> 
 
 
 
<p><span style="color: #0000ff;"><strong>SharedViewModel.kt</strong></span></p> 
 
 
 
<pre class="wp-block-preformatted">class SharedViewModel : ViewModel() {<br /> val name = MutableLiveData<;String>;()<br /><br /> fun sendName(text: String) {<br /> name.value = text<br /> }<br />}</pre> 
 
 
 
<p class="p1">4. Create a class named <strong><span style="color: #008000;">DialogWithDataFragment</span></strong> and add the below code.</p> 
 
 
 
<p><span style="color: #0000ff;"><strong>DialogWithDataFragment.kt</strong></span></p> 
 
 
 
<pre class="wp-block-preformatted">package com.c1ctech.dialogfragmentdemo<br /><br />import android.os.Bundle<br />import android.view.LayoutInflater<br />import android.view.View<br />import android.view.ViewGroup<br />import android.view.WindowManager<br />import androidx.fragment.app.DialogFragment<br />import androidx.lifecycle.ViewModelProvider<br />import kotlinx.android.synthetic.main.fragment_dialog_with_data.view.*<br /><br />class DialogWithDataFragment : DialogFragment() {<br /><br /> companion object {<br /> const val TAG = "DialogWithDataFragment"<br /> }<br /><br /> private lateinit var viewModel: SharedViewModel<br /><br /> override fun onCreateView(<br /> inflater: LayoutInflater,<br /> container: ViewGroup?,<br /> savedInstanceState: Bundle?<br /> ): View? {<br /> return inflater.inflate(R.layout.fragment_dialog_with_data, container, false)<br /> }<br /><br /> override fun onViewCreated(view: View, savedInstanceState: Bundle?) {<br /> super.onViewCreated(view, savedInstanceState)<br /> viewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)<br /> setupClickListeners(view)<br /> }<br /><br /> override fun onStart() {<br /> super.onStart()<br /> dialog?.window?.setLayout(<br /> WindowManager.LayoutParams.MATCH_PARENT,<br /> WindowManager.LayoutParams.WRAP_CONTENT<br /> )<br /> }<br /><br /> private fun setupClickListeners(view: View) {<br /> view.btnSubmit.setOnClickListener {<br /> viewModel.sendName(view.etName.text.toString())<br /> dismiss()<br /> }<br /> }<br />}</pre> 
 
 
 
<p class="graf--p">Here, on click of the <span style="color: #0000ff;"><strong>submit</strong></span> button, the <span style="color: #008000;"><strong>sendName() </strong></span>method of the <span style="color: #008000;"><strong>SharedViewModel</strong></span> is called.</p> 
 
 
 
<p class="graf--p">Now, the <span style="color: #008000;"><strong>name</strong></span> needs to be observed in the <strong><span style="color: #0000ff;">MainActivity</span></strong> and also we need to implement the click listener of the button to open the <strong><span style="color: #008000;">DialogWithDataFragment</span></strong>. </p> 
 
 
 
<p>5. Given below is the complete code of <strong><span style="color: #0000ff;">MainActivity.</span></strong></p> 
 
 
 
<p><strong><span style="color: #0000ff;">MainActivity.kt</span></strong></p> 
 
 
 
<pre class="wp-block-preformatted">package com.c1ctech.dialogfragmentdemo<br /><br />import android.os.Bundle<br />import androidx.appcompat.app.AppCompatActivity<br />import androidx.lifecycle.Observer<br />import androidx.lifecycle.ViewModelProvider<br />import kotlinx.android.synthetic.main.activity_main.*<br /><br />class MainActivity : AppCompatActivity() {<br /><br /> private lateinit var sharedViewModel: SharedViewModel<br /><br /> override fun onCreate(savedInstanceState: Bundle?) {<br /> super.onCreate(savedInstanceState)<br /> setContentView(R.layout.activity_main)<br /><br /> <strong> sharedViewModel = ViewModelProvider(this).get(SharedViewModel::class.java)</strong><br /><strong> sharedViewModel.name.observe(this, Observer {</strong><br /><strong> tvName.text = it</strong><br /><strong> })</strong><br /><br /> btnAlertDialog.setOnClickListener {<br /> AlertDialogFragment.newInstance().show(supportFragmentManager, AlertDialogFragment.TAG)<br /> }<br /><br /> btnCustomDialog.setOnClickListener {<br /> CustomDialogFragment.newInstance(<br /> getString(R.string.custom_dialog_title),<br /> getString(R.string.custom_dialog_subTitle)<br /> ).show(supportFragmentManager, CustomDialogFragment.TAG)<br /> }<br /><br /> <strong>btnDataDialog.setOnClickListener {</strong><br /><strong> DialogWithDataFragment().show(supportFragmentManager, DialogWithDataFragment.TAG)</strong><br /><strong> }</strong><br /> }<br />}</pre> 
 
 
 
<p>Run the app and click on <span style="color: #008000;"><strong>Dialog with data Fragment </strong><span style="color: #000000;">button. In the dialog, </span></span>enter some data in the EditText, click on <span style="color: #0000ff;"><strong>submit</strong></span> and see the text in MainActivity.</p> 
<p><img class="alignnone wp-image-2687" src="https://c1ctech.com/wp-content/uploads/2021/07/Screenshot_1626279569-576x1024.png" alt="" width="348" height="618" /> <img class="alignnone wp-image-2688" src="https://c1ctech.com/wp-content/uploads/2021/07/Screenshot_1626279576-576x1024.png" alt="" width="351" height="624" />

