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