Skip to content

Instantly share code, notes, and snippets.

@Shipaaaa
Created November 4, 2020 16:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Shipaaaa/aa208378e3ce531dae7bafef75bd7fef to your computer and use it in GitHub Desktop.
Save Shipaaaa/aa208378e3ce531dae7bafef75bd7fef to your computer and use it in GitHub Desktop.
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) }
}
@umbrellait-igor-novikov
Copy link

Как это правильно очистить? Сохранить ссылку на значение приходящее из метода и вызвать remove()? Утечка не уходит.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment