MaterialDialogFragments

Additional

Language
Kotlin
Version
0.90 (Sep 1, 2021)
Created
Mar 14, 2019
Updated
Sep 6, 2022 (Retired)
Owner
MFlisar
Contributor
MFlisar
1
Activity
Badge
Generate
Download
Source code

Advertisement

DEPRECATED

The basic AlertDialogs seem to not be maintained anymore and so I decided to write all of them myself as well. The new library does use M3 Material Design and supports a lifecycle based observation system that's even simpler and it allows to show a dialog as an AlertDialog, DialogFragment, BottomSheetDialogFragment and a FullscreenFragment.

Check it out here:

https://github.com/mflisar/MaterialDialogs

Latest release of this repo is 0.90


OLD

MaterialDialogFragments

Common dialog fragments based on https://github.com/afollestad/material-dialogs

Features

  • handles fragments save/restore states for you automatically
  • includes mechanism to handle dialog events (even after screen restoration) inside activity and/or fragments
  • includes some special dialogs (extracted in own modules) like e.g. a custom color dialog, text and number dialogs, multi text and number dialogs, a fast adapter recycler view dialog, an ads dialog - maybe even more to come
  • also supports to show dialogs as dialog or bottom sheet
  • easily extendable - create you own dialogs, simply check out the extension modules

Screenshots

Simple info dialog Info dialog with Timeout + Warning Info dialog with HTML content
Simple list dialog Multi select list dialog with images Multi select list dialog with custom check marks
Multi click list dialog Custom parcelable data list dialog Color picker dialog
Datetime dialog EditText dialog Multi EditText dialog
Number dialog Custom number dialog Multi number dialog
Progress dialog Frequency dialog Debug settings dialog

Gradle (via JitPack.io)

  1. add jitpack to your project's build.gradle:
repositories {
    maven { url "https://jitpack.io" }
}
  1. add the implementation statement(s) to your module's build.gradle:
dependencies {

 // --------
 // core - DialogInfo, DialogList, DialogProgress
 // --------
 
 implementation "com.github.MFlisar.MaterialDialogFragments:dialogs:<LATEST-VERSION>"
 
 // --------
 // optional
 // --------
 
 // input - DialogInput, DialogNumber, DialogNumberPicker
 implementation "com.github.MFlisar.MaterialDialogFragments:dialogs-input:<LATEST-VERSION>"
 
 // specials 
 implementation "com.github.MFlisar.MaterialDialogFragments:dialogs-datetime:<LATEST-VERSION>"
 implementation "com.github.MFlisar.MaterialDialogFragments:dialogs-fastadapter:<LATEST-VERSION>" 
 implementation "com.github.MFlisar.MaterialDialogFragments:dialogs-color:<LATEST-VERSION>"
 implementation "com.github.MFlisar.MaterialDialogFragments:dialogs-frequency:<LATEST-VERSION>"
 implementation "com.github.MFlisar.MaterialDialogFragments:dialogs-ads:<LATEST-VERSION>"

 // --------
 // alternatively, to include ALL modules at once
 // --------
 
 // implementation 'com.github.MFlisar:MaterialDialogFragments:<LATEST-VERSION>'
}

Usage

Usage is very simply, you only need to do following:

  • Activities or Fragments using the dialog fragments must implement the simple DialogFragmentCallback interface:

      interface DialogFragmentCallback {
       fun onDialogResultAvailable(event: BaseDialogEvent): Boolean
      }
    
  • you create a dialog with the corresponding setup class like e.g.:

      DialogInfo(
       1, // ID - this allows you to identify dialog events in the callback
       "Info Title".asText(),
       "Some info label".asText()
      )
        .create()
        .show(this)
    
  • in the DialogFragmentCallback you can handle the result now like following:

      override fun onDialogResultAvailable(event: BaseDialogEvent): Boolean {
          return when (event) {
        is DialogInfoEvent -> {
         Toast.makeText(this, "Info dialog closed - ID = ${event.id}", Toast.LENGTH_SHORT).show()
         true
        } else false
       }
      }
    

That's all. Optionally you can set up some global settings like following, preferably in your application class once only:

DialogSetup.SEND_CANCEL_EVENT_BY_DEFAULT = true

The DialogSetup offers some other settings as well.

Check the demo app for more informations.