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

تجربة ميزة "الكتابة"
‫Jetpack Compose هي مجموعة أدوات واجهة المستخدم المُقترَحة لنظام التشغيل Android. تعرَّف على كيفية سحب الشاشة للأعلى لتحديثها في ميزة "الإنشاء".

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

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

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

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