रीफ़्रेश करने के अनुरोध का जवाब देना

Compose को आज़माएं
Android के लिए, Jetpack Compose को यूज़र इंटरफ़ेस (यूआई) टूलकिट के तौर पर इस्तेमाल करने का सुझाव दिया जाता है. Compose में, रीफ़्रेश करने के लिए खींचने की सुविधा का इस्तेमाल करने का तरीका जानें.

इस दस्तावेज़ में, ऐप्लिकेशन को अपडेट करने का तरीका बताया गया है. यह तब किया जाता है, जब उपयोगकर्ता मैन्युअल तरीके से रीफ़्रेश करने का अनुरोध करता है. भले ही, वह स्वाइप जेस्चर से रीफ़्रेश करे या ऐक्शन बार में मौजूद रीफ़्रेश करने की कार्रवाई का इस्तेमाल करे.

रीफ़्रेश करने के जेस्चर का जवाब देना

जब उपयोगकर्ता, रीफ़्रेश करने के लिए स्वाइप करता है, तो सिस्टम प्रोग्रेस इंडिकेटर दिखाता है और आपके ऐप्लिकेशन के कॉलबैक तरीके को कॉल करता है. आपके कॉलबैक तरीके की ज़िम्मेदारी, ऐप्लिकेशन के डेटा को अपडेट करना है.

अपने ऐप्लिकेशन में, रीफ़्रेश करने के जेस्चर का जवाब देने के लिए, SwipeRefreshLayout.OnRefreshListener इंटरफ़ेस और उसके onRefresh() तरीके को लागू करें. जब उपयोगकर्ता स्वाइप जेस्चर करता है, तब onRefresh() तरीका शुरू होता है.

अपडेट करने की असल कार्रवाई के लिए, कोड को किसी अलग तरीके में रखें. बेहतर होगा कि इसे ViewModel में रखा जाए. इसके बाद, onRefresh() को लागू करने के दौरान, अपडेट करने के उस तरीके को कॉल करें. इस तरह, ऐक्शन बार से रीफ़्रेश करने पर, अपडेट करने के उसी तरीके का इस्तेमाल किया जा सकता है.

अपडेट करने के अपने तरीके में, डेटा अपडेट हो जाने के बाद, setRefreshing(false) को कॉल करें. इस तरीके को कॉल करने पर, SwipeRefreshLayout को प्रोग्रेस इंडिकेटर हटाने और व्यू के कॉन्टेंट को अपडेट करने का निर्देश मिलता है.

उदाहरण के लिए, यहां दिए गए कोड में onRefresh() को लागू किया गया है. साथ ही, ListView में दिखने वाले डेटा को अपडेट करने के लिए, myUpdateOperation() तरीके को शुरू किया गया है:

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