Merespons permintaan refresh

Mencoba cara Compose
Jetpack Compose adalah toolkit UI yang direkomendasikan untuk Android. Pelajari cara menarik untuk memuat ulang di Compose.

Dokumen ini menunjukkan cara mengupdate aplikasi saat pengguna meminta refresh manual, baik dengan memicunya menggunakan gestur geser maupun menggunakan tindakan refresh panel tindakan.

Merespons gestur refresh

Saat pengguna melakukan gestur geser-untuk-memuat ulang, sistem akan menampilkan indikator progres dan memanggil metode callback aplikasi Anda. Metode callback Anda bertanggung jawab untuk memperbarui data aplikasi.

Untuk merespons gestur refresh di aplikasi, implementasikan antarmuka SwipeRefreshLayout.OnRefreshListener dan metode onRefresh() -nya. Metode onRefresh() dipanggil saat pengguna melakukan gestur geser.

Masukkan kode untuk operasi update aktual dalam metode terpisah, sebaiknya dalam ViewModel, dan panggil metode update tersebut dari implementasi onRefresh(). Dengan demikian, Anda dapat menggunakan metode pembaruan yang sama untuk melakukan pembaruan saat pengguna memicu refresh dari panel tindakan.

Dalam metode update, panggil setRefreshing(false) setelah selesai memperbarui data. Memanggil metode ini akan memerintahkan SwipeRefreshLayout untuk menghapus indikator progres dan memperbarui konten tampilan.

Misalnya, kode berikut mengimplementasikan onRefresh() dan memanggil metode myUpdateOperation() untuk memperbarui data yang ditampilkan oleh 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();
  }
);

Merespons tindakan refresh

Jika pengguna meminta refresh menggunakan panel tindakan, sistem akan memanggil metode onOptionsItemSelected(). Aplikasi Anda merespons panggilan ini dengan menampilkan indikator progres dan me-refresh data aplikasi.

Untuk merespons tindakan refresh, ganti onOptionsItemSelected(). Dalam metode penggantian Anda, picu indikator progres SwipeRefreshLayout dengan memanggil setRefreshing() menggunakan nilai true, lalu jalankan operasi pembaruan. Lakukan pembaruan sebenarnya dalam metode terpisah, sehingga metode yang sama dapat dipanggil baik saat pengguna memicu pembaruan dengan gestur geser maupun menggunakan panel tindakan. Saat update selesai, panggil setRefreshing(false) untuk menghapus indikator progres refresh.

Kode berikut menunjukkan cara merespons tindakan permintaan:

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