Size: a a a

Android arch. components

2019 September 06

ST

Sasha Tainyuk in Android arch. components
Anton Potekhin
Я тут не понял как с этим работать. Вот например у меня есть асктивити и в нем фрагмент. В активити я обрабатываю onBack.  И в фрагменте я обрабатываю onBack. Как внутри фрагмента сказать активтит что я уже оработал back и в активтит его не нужно обрабатывать или наоборот что нужно ?
Из фрагмента requireActivity().getOnBackPressedDispatcher().addCallback()

https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher
источник

AP

Anton Potekhin in Android arch. components
это понятно. как колбек поставленный в активтит узнает что бек уже обработан во фрагменте ?
источник

ST

Sasha Tainyuk in Android arch. components
Anton Potekhin
это понятно. как колбек поставленный в активтит узнает что бек уже обработан во фрагменте ?
Ну если верить докам, то никак. Он просто не будет реагировать пока сверху в стеке кто-то есть. Или я не понял твоего вопроса
источник

AP

Anton Potekhin in Android arch. components
Sasha Tainyuk
Ну если верить докам, то никак. Он просто не будет реагировать пока сверху в стеке кто-то есть. Или я не понял твоего вопроса
Вот это и странно я то же пришел к выводу что никак после прочтения. А без этого как этим пользоваться не понятно ;)
источник

ST

Sasha Tainyuk in Android arch. components
В доках вот чего ещё пишут

If you are using onBackPressed() to handle Back button events, we recommend using a OnBackPressedCallback instead. However, if you are unable to make this change, the following rules apply:

All callbacks registered via addCallback are evaluated when you call super.onBackPressed().

onBackPressed is always called, regardless of any registered instances of OnBackPressedCallback.
источник

PS

Paul S in Android arch. components
Anton Potekhin
Я тут не понял как с этим работать. Вот например у меня есть асктивити и в нем фрагмент. В активити я обрабатываю onBack.  И в фрагменте я обрабатываю onBack. Как внутри фрагмента сказать активтит что я уже оработал back и в активтит его не нужно обрабатывать или наоборот что нужно ?
Если во фрагменте коллбек был создан с enabled = true, то триггернется только он, коллбеки засетанные глубже в очереди не триггернутся, а super.onBackPressed() из активити триггернется только если коллбеков с enabled = true нет
источник

ST

Sasha Tainyuk in Android arch. components
Paul S
Если во фрагменте коллбек был создан с enabled = true, то триггернется только он, коллбеки засетанные глубже в очереди не триггернутся, а super.onBackPressed() из активити триггернется только если коллбеков с enabled = true нет
Чет совсем непонятно стало 🤔
источник

ST

Sasha Tainyuk in Android arch. components
Выше написано совсем другое 😔🔫
источник

PS

Paul S in Android arch. components
@MainThread
   public void onBackPressed() {
       Iterator<OnBackPressedCallback> iterator =
               mOnBackPressedCallbacks.descendingIterator();
       while (iterator.hasNext()) {
           OnBackPressedCallback callback = iterator.next();
           if (callback.isEnabled()) {
               callback.handleOnBackPressed();
               return;
           }
       }
       if (mFallbackOnBackPressed != null) {
           mFallbackOnBackPressed.run();
       }
   }
источник

AP

Anton Potekhin in Android arch. components
Paul S
Если во фрагменте коллбек был создан с enabled = true, то триггернется только он, коллбеки засетанные глубже в очереди не триггернутся, а super.onBackPressed() из активити триггернется только если коллбеков с enabled = true нет
ладно рассмотрим реальную ситуацию из жизни.
У меня есть активити которая сейчас обрабатывает onBackPress и отображает сообщение «нажми еще раз чтобы выйти» и если происходит второе нажатие то выходит.

Так же в этом активити в качестве экранов используются фрагменты. И в одном из фрагментов если нажать бэк и при этом список прокручен вниз, то происходит прокрутка списка вверх и метод возвращает  true, что говорит о том что я уже обработал бэк и в активити уже onBackPressed  не вызывается. Но а если список уже прокручен вверх, то я возвращаю в onBackPressed фрагмента false и далее уже вызывается onBackPressed активити.

Так как такое можно сделать с OnBackPressedCallback я не пойму
источник

PS

Paul S in Android arch. components
Paul S
@MainThread
   public void onBackPressed() {
       Iterator<OnBackPressedCallback> iterator =
               mOnBackPressedCallbacks.descendingIterator();
       while (iterator.hasNext()) {
           OnBackPressedCallback callback = iterator.next();
           if (callback.isEnabled()) {
               callback.handleOnBackPressed();
               return;
           }
       }
       if (mFallbackOnBackPressed != null) {
           mFallbackOnBackPressed.run();
       }
   }
это из диспетчера. mFallbackOnBackPressed - это раннабл который вызывает super.onBackPressed() активити
источник

PS

Paul S in Android arch. components
Anton Potekhin
ладно рассмотрим реальную ситуацию из жизни.
У меня есть активити которая сейчас обрабатывает onBackPress и отображает сообщение «нажми еще раз чтобы выйти» и если происходит второе нажатие то выходит.

Так же в этом активити в качестве экранов используются фрагменты. И в одном из фрагментов если нажать бэк и при этом список прокручен вниз, то происходит прокрутка списка вверх и метод возвращает  true, что говорит о том что я уже обработал бэк и в активити уже onBackPressed  не вызывается. Но а если список уже прокручен вверх, то я возвращаю в onBackPressed фрагмента false и далее уже вызывается onBackPressed активити.

Так как такое можно сделать с OnBackPressedCallback я не пойму
по идее сетать коллбеку setEnabled(true) когда мы внизу списка, и setEnabled(false) когда мы вверху. но это не точно
источник

AP

Anton Potekhin in Android arch. components
Paul S
по идее сетать коллбеку setEnabled(true) когда мы внизу списка, и setEnabled(false) когда мы вверху. но это не точно
Так прикол в том что я могу только себя выключить. А по факту мне нужно другие колбеки выключать если я обработал onbackpress
источник
2019 September 09

K

Kopusha in Android arch. components
А напомните, SingleLiveData они вроде антипаттерном сейчас называют, а что-то получше завезли?
источник

ST

Sasha Tainyuk in Android arch. components
Kopusha
А напомните, SingleLiveData они вроде антипаттерном сейчас называют, а что-то получше завезли?
Когда? Чет я не помню такого
источник

K

Kopusha in Android arch. components
там были статьи, что этот костыль ломается, когда больше одного слушателя и вообще мол, интерфейс у него LD, а ведет себя не как LD обещает, короче раскритиковали
источник

K

Kopusha in Android arch. components
вроде новый костыль, который предлагался это чекать ивенты на isConsumed, держать в них флаг
источник

K

Kopusha in Android arch. components
но не могу найти статью
источник

ST

Sasha Tainyuk in Android arch. components
Kopusha
там были статьи, что этот костыль ломается, когда больше одного слушателя и вообще мол, интерфейс у него LD, а ведет себя не как LD обещает, короче раскритиковали
А разве у SLD смысл не в этом?🤔
Я читал на гитхабе целый тред и три или 4 реализации. На медиум даже была статья по этому поводу, там чувак расписал все
источник

КР

Кирилл Романенко in Android arch. components
Kopusha
там были статьи, что этот костыль ломается, когда больше одного слушателя и вообще мол, интерфейс у него LD, а ведет себя не как LD обещает, короче раскритиковали
Так есть реализация для нескольких слушателей. Но мне не нужно, я на один завёз.
источник