Odpowiadanie na żądanie odświeżania

Z tego dokumentu dowiesz się, jak zaktualizować aplikację, gdy użytkownik poprosi o instrukcje ręczne odświeżanie, niezależnie od tego, czy uruchamia się gest przesuwania czy przy użyciu paska działań. odświeżenie.

Reagowanie na gest odświeżania

Gdy użytkownik wykona gest przesuwania palcem, aby odświeżyć, system wyświetli wskaźnik postępu i wywołuje metodę wywołania zwrotnego aplikacji. Twoja metoda wywołania zwrotnego to odpowiada za aktualizację danych aplikacji.

Aby zareagować na gest odświeżania w aplikacji, zaimplementuj funkcję SwipeRefreshLayout.OnRefreshListener interfejsu i funkcji onRefresh() . Metoda onRefresh() jest wywoływana, gdy użytkownik wykona gest przesunięcia.

Umieść kod rzeczywistej operacji aktualizacji w osobnej metodzie (zalecamy w ViewModel i wywołaj tę metodę aktualizacji z onRefresh(). Dzięki temu możesz korzystać z tych samych aktualizacji metoda wykonywania aktualizacji, gdy użytkownik wywoła odświeżenie w wyniku działania przeglądarki.

W metodzie aktualizacji wywołanie setRefreshing(false) po zakończeniu aktualizowania danych. Wywołanie tej metody instruuje SwipeRefreshLayout aby usunąć wskaźnik postępu i zaktualizować zawartość widoku.

Na przykład ten kod implementuje onRefresh() i wywołuje metodę myUpdateOperation() w celu aktualizacji wyświetlanych danych 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();
  }
);

Reagowanie na działanie odświeżania

Jeśli użytkownik za pomocą paska działań poprosi o odświeżenie, system wywoła funkcję onOptionsItemSelected() . Aplikacja zareaguje na to połączenie, wyświetlając wskaźnik postępu, odświeżenie danych aplikacji.

Aby zareagować na działanie odświeżania, zastąp onOptionsItemSelected() W swojej metodzie zastępowania aktywuj funkcję Wskaźnik postępu dotyczący połączenia (SwipeRefreshLayout) setRefreshing() o wartości true, a potem wykonaj . Przeprowadź aktualizację w osobnej metodzie, tak samo można wywołać, gdy użytkownik wywoła aktualizację przesuwaniem palcem lub na pasku działań. Po zakończeniu aktualizacji zadzwoń pod numer setRefreshing(false) , aby usunąć wskaźnik postępu odświeżania.

Ten kod pokazuje, jak zareagować na działanie związane z żądaniem:

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);
}