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

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

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

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

للاستجابة لإيماءة إعادة التحميل في تطبيقك، نفِّذ واجهة 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);
}