Skip to content

Instantly share code, notes, and snippets.

@Shipaaaa
Created November 4, 2020 16:19
Show Gist options
  • Select an option

  • Save Shipaaaa/aa208378e3ce531dae7bafef75bd7fef to your computer and use it in GitHub Desktop.

Select an option

Save Shipaaaa/aa208378e3ce531dae7bafef75bd7fef to your computer and use it in GitHub Desktop.

Revisions

  1. Shipaaaa created this gist Nov 4, 2020.
    34 changes: 34 additions & 0 deletions OnBackPressedCallback.kt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,34 @@
    package ru.shipa.app.extension

    import androidx.activity.OnBackPressedCallback
    import androidx.fragment.app.Fragment

    /**
    * Добавление коллбэка для нажатия "назад".
    *
    * Коллбэк нужно добавлять в [Fragment.onAttach]. Коллбэки привязаны к жизненному циклу фрагмента,
    * поэтому при уничтожении фрагмента перестанут работать.
    * ```
    * class FormEntryFragment : Fragment() {
    * override fun onAttach(context: Context) {
    * super.onAttach(context)
    * addOnBackPressedCallback {
    * showAreYouSureDialog()
    * }
    * }
    * }
    * ```
    * @param enabled Состояние коллбэка по умолчанию. Если не задано - `true`.
    * @return Созданный коллбэк, который можно отключить при помощи [OnBackPressedCallback.setEnabled] или
    * удалить с помощью [OnBackPressedCallback.remove].
    * @see OnBackPressedCallback
    * @see androidx.activity.OnBackPressedDispatcher
    */
    fun Fragment.addOnBackPressedCallback(
    enabled: Boolean = true,
    onBackPressed: OnBackPressedCallback.() -> Unit
    ): OnBackPressedCallback {
    return object : OnBackPressedCallback(enabled) {
    override fun handleOnBackPressed() = onBackPressed()
    }.also { requireActivity().onBackPressedDispatcher.addCallback(this, it) }
    }