Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Merespons Permintaan Refresh

Tutorial ini menunjukkan cara memperbarui aplikasi saat pengguna meminta refresh manual, baik dengan memicu refresh menggunakan gestur geser maupun dengan tindakan refresh panel tindakan.

Merespons Gestur Refresh

Saat pengguna melakukan gestur geser, sistem akan menampilkan indikator progres dan memanggil metode callback aplikasi Anda. Metode callback Anda bertugas memperbarui data aplikasi secara aktual.

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

Anda harus menambahkan kode untuk operasi pembaruan aktual dalam metode yang terpisah, lalu memanggil metode pembaruan tersebut dari implementasi onRefresh(). Dengan demikian, Anda dapat menggunakan metode pembaruan yang sama untuk melakukan pembaruan saat pengguna memicu refresh dari panel tindakan.

Metode pembaruan Anda memanggil setRefreshing(false) setelah selesai memperbarui data. Memanggil metode ini memerintahkan SwipeRefreshLayout untuk menghapus indikator progres dan memperbarui konten tampilan.

Sebagai contoh, kode berikut mengimplementasikan onRefresh() dan memanggil metode myUpdateOperation() untuk memperbarui data yang ditampilkan oleh ListView:

Kotlin

    /*
     * 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.
        // The method calls setRefreshing(false) when it's finished.
        myUpdateOperation()
    }
    

Java

    /*
     * Sets up a SwipeRefreshLayout.OnRefreshListener that is invoked when the user
     * performs a swipe-to-refresh gesture.
     */
    mySwipeRefreshLayout.setOnRefreshListener(
        new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout");

                // This method performs the actual data-refresh operation.
                // The method calls setRefreshing(false) when it's finished.
                myUpdateOperation();
            }
        }
    );
    

Merespons Tindakan Refresh

Jika pengguna meminta refresh menggunakan panel tindakan, sistem akan memanggil metode onOptionsItemSelected(). Aplikasi Anda harus menanggapi 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. Sekali lagi, Anda harus melakukan pembaruan aktual dalam metode yang terpisah agar metode yang sama dapat dipanggil baik saat pengguna memicu pembaruan dengan gestur geser maupun dengan panel tindakan. Saat pembaruan selesai, panggil setRefreshing(false) untuk menghapus indikator progres refresh.

Kode berikut menunjukkan cara merespons tindakan permintaan:

Kotlin

    /*
     * Listen for option item selections so that we 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 if user triggered 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's finished.
                myUpdateOperation()

                return true
            }
        }

        // User didn't trigger a refresh, let the superclass handle this action
        return super.onOptionsItemSelected(item)
    }
    

Java

    /*
     * Listen for option item selections so that we 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 if user triggered 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's finished.
                myUpdateOperation();

                return true;
        }

        // User didn't trigger a refresh, let the superclass handle this action
        return super.onOptionsItemSelected(item);
    }
    

Catatan: Saat pengguna memicu refresh dengan tindakan geser seperti yang dijelaskan dalam Merespons Gestur Refresh, Anda tidak perlu memanggil setRefreshing(). Widget SwipeRefreshLayout akan menampilkan indikator progres dan menghapusnya saat pembaruan selesai. Namun, jika pembaruan dipicu dengan cara apa pun selain gestur geser, Anda harus mengaktifkan indikator progres secara eksplisit dengan setRefreshing(). Metode yang sebenarnya memperbarui data akan memanggil setRefreshing(false) untuk menandakan bahwa pembaruan sudah selesai.