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

تجربة طريقة Compose
‫Jetpack Compose هي مجموعة أدوات واجهة المستخدِم المقترَحة لنظام Android. كيفية استخدام ميزة "السحب للتجديد" في Compose

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

الردّ على إيماءة التجديد

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

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