الرد على طلب إعادة تحميل

يعرض هذا المستند كيفية تحديث تطبيقك عندما يطلب المستخدم يدويًا. التحديث، سواء تم تشغيله بإيماءة التمرير السريع أو باستخدام شريط الإجراءات إجراء التحديث.

الاستجابة لإيماءة إعادة التحميل

عندما يقوم المستخدم بإيماءة التمرير السريع للتحديث، يعرض النظام مؤشر التقدم ويستدعي طريقة معاودة الاتصال لتطبيقك. طريقة معاودة الاتصال هي المسئول عن تحديث بيانات التطبيق.

للاستجابة لإيماءة إعادة التحميل في تطبيقك، عليك تنفيذ SwipeRefreshLayout.OnRefreshListener وواجهة مستخدم onRefresh() . يتم استدعاء الطريقة onRefresh() عندما ينفِّذ المستخدم عملية إيماءة التمرير السريع.

ضع الرمز لعملية التحديث الفعلية بطريقة منفصلة، ويُفضَّل أن يكون ذلك في ViewModel، ثم استدعاء طريقة التعديل هذه من تنفيذ onRefresh(). بهذه الطريقة، يمكنك استخدام التحديث نفسه طريقة لإجراء التحديث عندما يشغّل المستخدم إعادة تحميل من الإجراء الشريط.

في طريقة التحديث، اتصل setRefreshing(false) عند الانتهاء من تحديث البيانات. يؤدي استدعاء هذه الطريقة إلى SwipeRefreshLayout لإزالة مؤشر التقدم وتعديل محتوى طريقة العرض.

على سبيل المثال، ينفذ الرمز التالي onRefresh() استدعاء الطريقة myUpdateOperation() لتحديث البيانات المعروضة بواسطة 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();
  }
);

الاستجابة لإجراء إعادة التحميل

إذا طلب المستخدم تحديثًا باستخدام شريط الإجراءات، يستدعي النظام onOptionsItemSelected() . يستجيب تطبيقك لهذه المكالمة من خلال عرض مؤشر التقدم وتحديث بيانات التطبيق.

للاستجابة لإجراء إعادة التحميل، عليك إلغاء onOptionsItemSelected() في طريقة الإلغاء، شغِّل مؤشر تقدّم SwipeRefreshLayout من خلال الاتصال setRefreshing() بالقيمة true، ثم تنفيذ عملية تحديث. قم بإجراء التحديث الفعلي بطريقة منفصلة، بحيث سواء كان المستخدم يجري التحديث بالتمرير السريع أو يستخدم شريط الإجراءات. عند انتهاء التحديث، اتصِل بخدمة setRefreshing(false). لإزالة مؤشر تقدم التحديث.

يعرض الرمز التالي كيفية الاستجابة لإجراء الطلب:

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