پاسخ دادن به درخواست بازآوری

امتحان کردن روش Compose
Jetpack Compose جعبه‌ابزار واسط کاربر توصیه‌شده برای Android است. با نحوه کشیدن برای بازآوری در Compose آشنا شوید.

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

پاسخ دادن به اشاره بازآوری

وقتی کاربر اشاره تند کشیدن برای بازآوری را انجام می‌دهد، سیستم نشانگر پیشرفت را نمایش می‌دهد و روش بازخوان برنامه شما را فراخوانی می‌کند. روش بازخوانی شما مسئول به‌روزرسانی داده‌های برنامه است.

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

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

در روش به‌روزرسانی، 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();
  }
);

پاسخ به کنش بازآوری

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

برای پاسخ دادن به کنش بازآوری، onOptionsItemSelected() را لغو کنید. در روش لغو، نشانگر پیشرفت SwipeRefreshLayout را با فراخوانی setRefreshing() با مقدار true راه‌اندازی کنید، سپس عملیات به‌روزرسانی را انجام دهید. به‌روزرسانی واقعی را در روشی جداگانه انجام دهید تا بتوان همان روش را فراخوانی کرد، چه کاربر به‌روزرسانی را با تند کشیدن فعال کند یا از نوار اقدام استفاده کند. وقتی به‌روزرسانی تمام شد، 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);
}