Odpowiadanie na żądanie odświeżania

Wypróbuj tworzenie wiadomości
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak odświeżyć aplikację przesuwając palcem w dół.

Ten dokument pokazuje, jak zaktualizować aplikację, gdy użytkownik poprosi o ręczne odświeżenie, niezależnie od tego, czy wywoła je gestem przesunięcia czy za pomocą przycisku odświeżania na pasku czynności.

Odpowiedź na gest odświeżania

Gdy użytkownik wykona gest przesunięcia w dół, aby odświeżyć, system wyświetli wskaźnik postępu i wywoła metodę wywołania zwrotnego aplikacji. Twoja metoda wywołania zwrotnego odpowiada za aktualizowanie danych aplikacji.

Aby obsłużyć gest odświeżania w aplikacji, zaimplementuj interfejs SwipeRefreshLayout.OnRefreshListener i jego metodę onRefresh(). Metoda onRefresh() jest wywoływana, gdy użytkownik wykona gest przesunięcia.

Umieść kod odpowiadający rzeczywistej operacji aktualizacji w osobnej metodzie, najlepiej w ViewModel, i wywołuj tę metodę aktualizacji z implementacji onRefresh(). W ten sposób możesz użyć tej samej metody aktualizacji, aby przeprowadzić aktualizację, gdy użytkownik wywoła odświeżenie za pomocą paska działań.

W metodzie aktualizacji wywołaj funkcję setRefreshing(false) po zakończeniu aktualizacji danych. Wywołanie tej metody powoduje, że SwipeRefreshLayout usuwa wskaźnik postępu i aktualizuje zawartość widoku.

Na przykład kod poniżej implementuje onRefresh() i wywołuje metodę myUpdateOperation(), aby zaktualizować dane wyświetlane przez ListView:

Kotlin

// Sets up a SwipeRefreshLayout.OnRefreshListener that invokes when
// the user performs a swipe-to-refresh gesture.

mySwipeRefreshLayout.setOnRefreshListener {
    Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout")

    // This method performs the actual data-refresh operation and calls
    // setRefreshing(false) when it finishes.
    myUpdateOperation()
}

Java

// Sets up a SwipeRefreshLayout.OnRefreshListener that is invoked when
// the user performs a swipe-to-refresh gesture.

mySwipeRefreshLayout.setOnRefreshListener(() -> {
    Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout");

    // This method performs the actual data-refresh operation and calls
    // setRefreshing(false) when it finishes.
    myUpdateOperation();
  }
);

Odpowiedź na działanie odświeżania

Jeśli użytkownik poprosi o odświeżenie za pomocą paska działań, system wywoła metodę onOptionsItemSelected(). Aplikacja reaguje na to wywołanie, wyświetlając wskaźnik postępu i odświeżając dane.

Aby odpowiedzieć na działanie odświeżania, zastosuj zastąpienie onOptionsItemSelected(). W metodzie zastąpienia wywołaj wskaźnik postępu SwipeRefreshLayout, wywołując setRefreshing() z wartością true, a następnie wykonaj operację aktualizacji. Przeprowadź rzeczywistą aktualizację w osobnej metodzie, aby można było wywołać tę samą metodę niezależnie od tego, czy użytkownik wywoła aktualizację za pomocą przesunięcia czy za pomocą paska działań. Po zakończeniu aktualizacji wywołaj funkcję setRefreshing(false), aby usunąć wskaźnik postępu odświeżania.

Ten kod pokazuje, jak odpowiedzieć na działanie żądania:

Kotlin

// Listen for option item selections to receive a notification when the user
// requests a refresh by selecting the refresh action bar item.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {

        // Check whether the user triggers a refresh:
        R.id.menu_refresh -> {
            Log.i(LOG_TAG, "Refresh menu item selected")

            // Signal SwipeRefreshLayout to start the progress indicator.
            mySwipeRefreshLayout.isRefreshing = true

            // Start the refresh background task. This method calls
            // setRefreshing(false) when it finishes.
            myUpdateOperation()

            return true
        }
    }

    // User doesn't trigger a refresh. Let the superclass handle this action.
    return super.onOptionsItemSelected(item)
}

Java

// Listen for option item selections to receive a notification when the user
// requests a refresh by selecting the refresh action bar item.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        // Check whether the user triggers a refresh:
        case R.id.menu_refresh:
            Log.i(LOG_TAG, "Refresh menu item selected");

            // Signal SwipeRefreshLayout to start the progress indicator.
            mySwipeRefreshLayout.setRefreshing(true);

            // Start the refresh background task. This method calls
            // setRefreshing(false) when it finishes.
            myUpdateOperation();

            return true;
    }

    // User doesn't trigger a refresh. Let the superclass handle this action.
    return super.onOptionsItemSelected(item);
}