Dokumen ini menunjukkan cara mengupdate aplikasi saat pengguna meminta panduan memuat ulang, baik dengan memicunya dengan gestur geser maupun menggunakan panel tindakan tindakan refresh.
Merespons gestur muat ulang
Saat pengguna melakukan gestur geser-untuk-refresh, sistem akan menampilkan indikator progres dan memanggil metode callback aplikasi Anda. Metode callback Anda adalah bertanggung jawab untuk memperbarui data aplikasi.
Untuk merespons gestur refresh di aplikasi Anda, implementasikan metode
SwipeRefreshLayout.OnRefreshListener
dan antarmuka pengguna
onRefresh()
. Metode onRefresh()
dipanggil saat pengguna melakukan
gestur geser.
Masukkan kode untuk operasi update aktual dalam metode terpisah, sebaiknya
di ViewModel
, dan memanggil metode update tersebut dari
Implementasi onRefresh()
. Dengan demikian, Anda dapat
menggunakan pembaruan yang sama
metode untuk melakukan update saat pengguna memicu muat ulang dari tindakan
.
Dalam metode pembaruan Anda, panggil
setRefreshing(false)
ketika selesai memperbarui data. Memanggil metode ini menginstruksikan
SwipeRefreshLayout
untuk menghapus indikator kemajuan
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 muat ulang dengan menggunakan panel tindakan, sistem akan memanggil metode
onOptionsItemSelected()
. Aplikasi Anda merespons panggilan ini dengan menampilkan indikator progres dan
memuat ulang data aplikasi.
Untuk merespons tindakan refresh, ganti
onOptionsItemSelected()
. Dalam metode penggantian, picu metode
Indikator progres SwipeRefreshLayout
dengan memanggil
setRefreshing()
dengan nilai true
, lalu lakukan
operasi update. Lakukan pembaruan aktual dalam metode terpisah, agar proses
dapat dipanggil apakah pengguna memicu pembaruan dengan menggeser atau menggunakan
panel tindakan. Setelah update selesai, panggil setRefreshing(false)
untuk menghapus indikator progres muat ulang.
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); }