Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Merespons Permintaan Refresh

Tutorial ini menunjukkan kepada Anda cara mengupdate 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 bertanggung jawab untuk mengupdate data aplikasi secara aktual.

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

Anda harus meletakkan kode untuk operasi update aktual dalam metode terpisah, dan memanggil metode update tersebut dari implementasi onRefresh(). Dengan begitu, Anda bisa menggunakan metode update yang sama untuk melakukan update saat pengguna memicu refresh dari panel tindakan.

Metode update Anda akan memanggil setRefreshing(false) jika telah selesai mengupdate data. Pemanggilan metode ini akan menginstruksikan SwipeRefreshLayout untuk menghapus indikator progres dan mengupdate konten tampilan.

Misalnya, kode berikut mengimplementasikan onRefresh() dan memanggil metode myUpdateOperation() untuk mengupdate 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 dengan menggunakan panel tindakan, sistem akan memanggil metode onOptionsItemSelected(). Aplikasi Anda harus menanggapi panggilan ini dengan menampilkan indikator progres dan memuat ulang data aplikasi.

Untuk merespons tindakan refresh, ganti onOptionsItemSelected(). Dalam metode penggantian Anda, picu indikator progres SwipeRefreshLayout dengan memanggil setRefreshing() dengan nilai true, kemudian lakukan operasi update. Sekali lagi, Anda harus melakukan update aktual dalam metode yang terpisah, agar metode yang sama bisa dipanggil baik saat pengguna memicu update dengan geser atau dengan panel tindakan. Setelah update selesai, panggil setRefreshing(false) untuk menghapus indikator progress 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 menangani tampilan indikator progres dan menghapusnya jika update telah selesai. Namun, jika update terpicu dengan cara apa pun selain gestur geser, Anda perlu mengaktifkan indikator progres secara eksplisit dengan setRefreshing(). Metode yang memuat ulang data secara aktual akan memanggil setRefreshing(false) untuk memberi sinyal bahwa update telah selesai.