Kotlin Notes: Difference between revisions

From James's Wiki
No edit summary
No edit summary
Line 16: Line 16:


==== Code in HomeFragment ====
==== Code in HomeFragment ====
At the type we define the Interface used for the listener
  enum class DialogTypes {
  enum class DialogTypes {
     RAPID_SHORT_TIME,
     RAPID_SHORT_TIME,
Line 23: Line 25:
  interface DialogListener {
  interface DialogListener {
     fun openDialog(type: DialogTypes)
     fun openDialog(type: DialogTypes)
}
class HomeFragment : Fragment(), LocationProvider, DialogListener {
//other code
...
override fun openDialog(type: DialogTypes) {
        Timber.i("openDialog type: $type")
        when (type) {
            DialogTypes.RAPID_SHORT_TIME -> {
                val dialogRapidShortTimeHelper = DialogRapidShortTimeHelper()
                dialogRapidShortTimeHelper.show(childFragmentManager, "dialog")
            }
            DialogTypes.TIME_INPUT_HOUR -> {
                val dialogTimeInputHourHelper = DialogTimeInputHourHelper()
                dialogTimeInputHourHelper.show(childFragmentManager, "dialog")
            }
        }
    }
  }
  }

Revision as of 21:16, 1 March 2025

Custom Listeners

Define the listener
var onDismissListener: (() -> Unit)? = null
Invoke the listener
onDismissListener?.invoke()
Use the listener in another class
dialogRapidShortTimePicker.onDismissListener = {
     Timber.d("Dialog dismissed from helper")
     dismiss()
}

Interfaces for callbacks

Here is an interface used to open dialogs from HomeFragment since dialogs must be opened from a fragment or activity

Code in HomeFragment

At the type we define the Interface used for the listener

enum class DialogTypes {
    RAPID_SHORT_TIME,
    TIME_INPUT_HOUR
}

interface DialogListener {
    fun openDialog(type: DialogTypes)
}

class HomeFragment : Fragment(), LocationProvider, DialogListener {

//other code
...
override fun openDialog(type: DialogTypes) {
       Timber.i("openDialog type: $type")
       when (type) {
           DialogTypes.RAPID_SHORT_TIME -> {
               val dialogRapidShortTimeHelper = DialogRapidShortTimeHelper()
               dialogRapidShortTimeHelper.show(childFragmentManager, "dialog")
           }
           DialogTypes.TIME_INPUT_HOUR -> {
               val dialogTimeInputHourHelper = DialogTimeInputHourHelper()
               dialogTimeInputHourHelper.show(childFragmentManager, "dialog")
           }
       }
   }
}