به درخواست تجدید پاسخ دهید

روش نوشتن را امتحان کنید
Jetpack Compose ابزار رابط کاربری پیشنهادی برای اندروید است. یاد بگیرید که چگونه در Compose، برای رفرش کردن، pull کنید.

این سند نحوه به‌روزرسانی برنامه شما را هنگامی که کاربر درخواست به‌روزرسانی دستی می‌کند، نشان می‌دهد، چه با یک حرکت کشیدن انگشت و چه با استفاده از عمل به‌روزرسانی نوار ابزار.

به حرکت تازه‌سازی پاسخ دهید

وقتی کاربر حرکت کشیدن برای تازه کردن صفحه (swipe to refresh) را انجام می‌دهد، سیستم نشانگر پیشرفت را نمایش می‌دهد و متد callback برنامه شما را فراخوانی می‌کند. متد callback شما مسئول به‌روزرسانی داده‌های برنامه است.

برای پاسخ به حرکت رفرش در برنامه خود، رابط SwipeRefreshLayout.OnRefreshListener و متد onRefresh() آن را پیاده‌سازی کنید. متد onRefresh() زمانی فراخوانی می‌شود که کاربر یک حرکت رفرش (swipe) انجام دهد.

کد مربوط به عملیات به‌روزرسانی واقعی را در یک متد جداگانه، ترجیحاً در یک ViewModel ، قرار دهید و آن متد به‌روزرسانی را از پیاده‌سازی onRefresh() خود فراخوانی کنید. به این ترتیب، می‌توانید از همان متد به‌روزرسانی برای انجام به‌روزرسانی هنگامی که کاربر یک به‌روزرسانی را از نوار عمل (action bar) فعال می‌کند، استفاده کنید.

در متد به‌روزرسانی خود، وقتی به‌روزرسانی داده‌ها تمام شد، setRefreshing(false) را فراخوانی کنید. فراخوانی این متد به SwipeRefreshLayout دستور می‌دهد که نشانگر پیشرفت را حذف کرده و محتوای نما را به‌روزرسانی کند.

برای مثال، کد زیر onRefresh() را پیاده‌سازی کرده و متد myUpdateOperation() را برای به‌روزرسانی داده‌های نمایش داده شده توسط یک ListView فراخوانی می‌کند:

کاتلین

// 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()
}

جاوا

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

به عمل تازه‌سازی پاسخ دهید

اگر کاربر با استفاده از action bar درخواست به‌روزرسانی (refresh) کند، سیستم متد onOptionsItemSelected() را فراخوانی می‌کند. برنامه شما با نمایش نشانگر پیشرفت و به‌روزرسانی داده‌های برنامه به این فراخوانی پاسخ می‌دهد.

برای پاسخ به عمل به‌روزرسانی، تابع onOptionsItemSelected() را بازنویسی کنید. در متد بازنویسی‌شده، با فراخوانی setRefreshing() با مقدار true ، نشانگر پیشرفت SwipeRefreshLayout را فعال کنید، سپس عملیات به‌روزرسانی را انجام دهید. به‌روزرسانی واقعی را در یک متد جداگانه انجام دهید، بنابراین چه کاربر به‌روزرسانی را با کشیدن انگشت فعال کند و چه از نوار اکشن استفاده کند، می‌توان همان متد را فراخوانی کرد. پس از اتمام به‌روزرسانی، برای حذف نشانگر پیشرفت به‌روزرسانی، تابع setRefreshing(false) را فراخوانی کنید.

کد زیر نحوه پاسخ به اکشن درخواست را نشان می‌دهد:

کاتلین

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

جاوا

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