Udostępniaj niestandardową nawigację wstecz

Nawigacja wstecz to sposób, w jaki użytkownicy poruszają się wstecz po historii ekranów, które wyświetlali. Poprzednio odwiedzone. Wszystkie urządzenia z Androidem mają przycisk Wstecz nawigacji, więc nie dodawaj przycisku Wstecz do interfejsu aplikacji. W zależności od urządzenia z Androidem, może to być przycisk fizyczny lub oprogramowanie. Przycisk

Android przechowuje tylny stos miejsc docelowych, gdy użytkownik porusza się po aplikacji podczas korzystania z aplikacji. Dzięki temu Android będzie mógł prawidłowo przejść do poprzednie miejsca docelowe po naciśnięciu przycisku Wstecz. Istnieje jednak kilka metod, w których aplikacja musi wdrożyć własne działanie Wstecz, zapewniają użytkownikom najlepsze wrażenia.

Na przykład gdy używasz WebView, możesz zastąpić domyślne działanie przycisku Wstecz, aby umożliwić użytkownikowi mogą wrócić do przeglądania swojej historii przeglądania zamiast do poprzednich ekranów w aplikacji.

Android 13 i nowsze wersje obsługują gest przewidywania gestu cofania na urządzeniach z Androidem. Do więcej informacji o tej funkcji znajdziesz w artykule Dodawanie obsługi gestu przewidywania tekstu cofania.

Wdróż niestandardową nawigację wsteczną

ComponentActivity, podstawa zajęcia: FragmentActivity oraz AppCompatActivity, umożliwia kontrolowanie działania przycisku Wstecz za pomocą jego OnBackPressedDispatcher który można pobrać, wywołując metodę getOnBackPressedDispatcher().

Element OnBackPressedDispatcher określa sposób wysyłania zdarzeń związanych z przyciskiem Wstecz do co najmniej jednego OnBackPressedCallback obiektów. Konstruktor dla funkcji OnBackPressedCallback przyjmuje wartość logiczną dla funkcji początkowe włączenie. Gdy włączone jest wywołanie zwrotne, czyli isEnabled() zwraca true – dyspozytor wywołuje handleOnBackPressed() do obsługi zdarzenia przycisku Wstecz. Stan włączenia możesz zmienić, dzwoniąc setEnabled()

Wywołania zwrotne są dodawane przy użyciu metod addCallback. Zalecamy użycie addCallback() , która pobiera LifecycleOwner. Dzięki temu pole OnBackPressedCallback zostanie dodane tylko wtedy, gdy LifecycleOwner będzie Lifecycle.State.STARTED. Aktywność usuwa też zarejestrowane wywołania zwrotne, jeśli są powiązane LifecycleOwner jest zniszczony, co zapobiega wyciekom pamięci i sprawia, że LifecycleOwner odpowiednie do użytku we fragmentach lub u innych właścicieli cyklu życia, którzy mają krótszy okres życia niż aktywność.

Oto przykładowa implementacja wywołania zwrotnego:

Kotlin

class MyFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // This callback is only called when MyFragment is at least started
        val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
            // Handle the back button event
        }

        // The callback can be enabled or disabled here or in the lambda
    }
    ...
}

Java

public class MyFragment extends Fragment {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // This callback is only called when MyFragment is at least started
        OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
            @Override
            public void handleOnBackPressed() {
                // Handle the back button event
            }
        };
        requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

        // The callback can be enabled or disabled here or in handleOnBackPressed()
    }
    ...
}

Możesz podać wiele wywołań zwrotnych za pomocą funkcji addCallback(). Wywołania zwrotne są wtedy wywoływane w kolejności odwrotnej niż dodawanie ich – wywołanie zwrotne dodane jako pierwsze daje szansę na obsługę Zdarzenie dotyczące przycisku Wstecz. Jeśli na przykład dodasz trzy wywołania zwrotne o nazwie one, two i three w tej kolejności są wywoływane w kolejności three, two, one.

Wywołania zwrotne występują po Łańcuch odpowiedzialności wzorcem. Każde wywołanie zwrotne w łańcuchu jest wywoływane tylko wtedy, gdy poprzedzające oddzwanianie nie zostało włączone. Oznacza to, że w polu w poprzednim przykładzie wywołanie zwrotne two jest wywoływane tylko wtedy, gdy wywołanie zwrotne three nie jest włączona, a wywołanie zwrotne one jest wywoływane tylko wtedy, gdy wywołanie zwrotne two nie jest włączony.

Pamiętaj, że po dodaniu wywołania zwrotnego za pomocą funkcji addCallback() nie zostanie dodana do łańcucha odpowiedzialności, dopóki LifecycleOwner przechodzi w stan Lifecycle.State.STARTED.

Zalecamy zmianę stanu włączenia w: OnBackPressedCallback w przypadku zmian tymczasowych, co pozwala zachować opisaną powyżej kolejność. Jest to szczególnie ważne, jeśli masz zarejestrowane wywołania zwrotne zagnieżdżonych właścicieli cyklu życia.

Jeśli chcesz całkowicie usunąć OnBackPressedCallback, Możesz zadzwonić remove() Zwykle nie jest to konieczne, ponieważ wywołania zwrotne są automatycznie usuwane po powiązane z nim LifecycleOwner to zniszczone.

Aktywność onBackPressed()

Jeśli używasz onBackPressed() do obsługi zdarzeń przycisku Wstecz OnBackPressedCallback. Jeśli jednak nie możesz wprowadzić tej zmiany, obowiązują te zasady:

  • Wszystkie wywołania zwrotne zarejestrowane przez addCallback są oceniane podczas połączenia super.onBackPressed()
  • W Androidzie 12 (poziom interfejsu API 32) i starszych wersjach funkcja onBackPressed jest zawsze wywoływana, niezależnie od zarejestrowanych instancji OnBackPressedCallback.