Kotlin Notes

From James's Wiki
Revision as of 11:15, 2 March 2025 by Ractive (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

In the class that we want to call the listener from

 class SomeClass {
     var listener: DialogListener?=null
 ...
 //other code
 ...
 override fun onSingleTapConfirmed(event: MotionEvent): Boolean {
        val x = event.x.toInt()
        val y = event.y.toInt()
        Timber.v("onSingleTapConfirmed: $x, $y")
 ...
 //other code
 ...
 segments[index].preTripSegment.durationClickArea.contains(x, y) -> {
     //this is the part that performs the callback
     listener?.openDialog(DialogTypes.RAPID_SHORT_TIME)
 }