Rispondere a una richiesta di aggiornamento

Questo documento mostra come aggiornare l'app quando l'utente richiede un manuale aggiornare, attivandola con un gesto di scorrimento o con la barra delle azioni. azione di aggiornamento.

Rispondere al gesto di aggiornamento

Quando l'utente esegue il gesto di scorrimento per aggiornare, il sistema visualizza indicatore di avanzamento e chiama il metodo di callback dell'app. Il tuo metodo di callback è responsabile dell'aggiornamento dei dati dell'app.

Per rispondere al gesto di aggiornamento nell'app, implementa il SwipeRefreshLayout.OnRefreshListener all'interfaccia e le sue onRefresh() . Il metodo onRefresh() viene richiamato quando l'utente esegue una gesto di scorrimento.

Inserisci il codice per l'effettiva operazione di aggiornamento in un metodo separato, preferibilmente in un ViewModel e richiama questo metodo di aggiornamento dal tuo Implementazione di onRefresh(). In questo modo, puoi utilizzare lo stesso aggiornamento per eseguire l'aggiornamento quando l'utente attiva un aggiornamento dall'azione .

Nel metodo di aggiornamento, chiama setRefreshing(false) al termine dell'aggiornamento dei dati. La chiamata di questo metodo indica SwipeRefreshLayout per rimuovere l'indicatore di avanzamento e aggiornare i contenuti della visualizzazione.

Ad esempio, il seguente codice implementa onRefresh() e richiama il metodo myUpdateOperation() per aggiornare i dati visualizzati di un 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();
  }
);

Rispondere all'azione di aggiornamento

Se l'utente richiede un aggiornamento utilizzando la barra delle azioni, il sistema richiama la onOptionsItemSelected() . L'app risponde a questa chiamata mostrando l'indicatore di avanzamento e aggiornare i dati dell'app.

Per rispondere all'azione di aggiornamento, sostituisci onOptionsItemSelected(). Nel tuo metodo di override, attiva Indicatore di avanzamento di SwipeRefreshLayout tramite chiamata setRefreshing() con il valore true, quindi esegui il comando l'operazione di aggiornamento. Esegui l'aggiornamento effettivo in un metodo separato, quindi può essere chiamato se l'utente attiva l'aggiornamento con uno scorrimento o utilizza la barra delle azioni. Al termine dell'aggiornamento, chiama setRefreshing(false) per rimuovere l'indicatore di avanzamento dell'aggiornamento.

Il seguente codice mostra come rispondere all'azione di richiesta:

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