RecyclerView की स्थिति मैनेज करना

RecyclerView कम से कम ग्राफ़िकल संसाधनों का इस्तेमाल करके, ज़्यादा से ज़्यादा डेटा दिखा सकता है. जब उपयोगकर्ता, RecyclerView में मौजूद आइटम को स्क्रोल करते हैं, तो स्क्रीन से बाहर स्क्रोल हो चुके आइटम के View इंस्टेंस का इस्तेमाल, स्क्रीन पर स्क्रोल होने वाले नए आइटम बनाने के लिए किया जाता है. हालांकि, डिवाइस को घुमाने जैसे कॉन्फ़िगरेशन में बदलाव करने पर, RecyclerView की स्थिति रीसेट हो सकती है. ऐसे में, उपयोगकर्ताओं को आइटम की सूची में अपनी पिछली जगह पर वापस जाने के लिए, फिर से स्क्रोल करना पड़ सकता है.

RecyclerView को अपनी स्थिति बनाए रखनी चाहिए. खास तौर पर, स्क्रोल की स्थिति और कॉन्फ़िगरेशन में होने वाले सभी बदलावों के दौरान, सूची के एलिमेंट की स्थिति बनाए रखनी चाहिए.

नतीजे

आपका RecyclerView, स्क्रोल की स्थिति और RecyclerView सूची में मौजूद हर आइटम की स्थिति को वापस ला सकता है.

वर्शन के साथ काम करने वाली सुविधाएं

यह सुविधा, एपीआई के सभी लेवल के साथ काम करती है.

डिपेंडेंसी

कोई नहीं.

स्थिति बनाए रखना

स्क्रोल की स्थिति सेव करने के लिए, RecyclerView.Adapter की स्थिति वापस लाने की नीति सेट करें.RecyclerView RecyclerView की सूची में मौजूद आइटम की स्थिति सेव करें. सूची में मौजूद आइटम की स्थिति को RecyclerView अडैप्टर में जोड़ें. साथ ही, जब सूची में मौजूद आइटम, ViewHolder से बाउंड हों, तो उनकी स्थिति वापस लाएं.

1. Adapter की स्थिति वापस लाने की नीति चालू करना

RecyclerView अडैप्टर की स्थिति वापस लाने की नीति चालू करें, ताकि कॉन्फ़िगरेशन में होने वाले बदलावों के दौरान, RecyclerView की स्क्रोलिंग की स्थिति बनी रहे. अडैप्टर कंस्ट्रक्टर में, नीति की खास जानकारी जोड़ें:

Kotlin

class MyAdapter() : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    init {
        stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY
    }
    ...
}

Java

class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    public Adapter() {
        setStateRestorationPolicy(StateRestorationPolicy.PREVENT_WHEN_EMPTY);
    }
    ...
}

2. स्थिति वाले सूची के आइटम की स्थिति सेव करना

जटिल RecyclerView सूची में मौजूद आइटम की स्थिति सेव करें. जैसे, वे आइटम जिनमें EditText एलिमेंट शामिल हैं. उदाहरण के लिए, EditText की स्थिति सेव करने के लिए, टेक्स्ट में होने वाले बदलावों को कैप्चर करने के लिए, onClick हैंडलर जैसा कॉलबैक जोड़ें. कॉलबैक में, तय करें कि कौन सा डेटा सेव करना है:

Kotlin

input.addTextChangedListener(
    afterTextChanged = { text ->
        text?.let {
            // Save state here.
        }
    }
)

Java

input.addTextChangedListener(new TextWatcher() {

    ...

    @Override
    public void afterTextChanged(Editable s) {
        // Save state here.
    }
});

अपने Activity या Fragment में कॉलबैक का एलान करें. स्थिति सेव करने के लिए, ViewModel का इस्तेमाल करें.

3. Adapter में सूची में मौजूद आइटम की स्थिति जोड़ना

अपने RecyclerView.Adapter में, सूची में मौजूद आइटम की स्थिति जोड़ें. जब आपका होस्ट Activity या Fragment बनाया जाता है, तब आइटम की स्थिति को अडैप्टर कंस्ट्रक्टर में पास करें:

Kotlin

val adapter = MyAdapter(items, viewModel.retrieveState())

Java

MyAdapter adapter = new MyAdapter(items, viewModel.retrieveState());

4. अडैप्टर के ViewHolder में, सूची में मौजूद आइटम की स्थिति वापस लाना

RecyclerView.Adapter में, जब किसी आइटम को ViewHolder से बाइंड किया जाता है, तो आइटम की स्थिति वापस लाएं:

Kotlin

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    ...
    val item = items[position]
    val state = states.firstOrNull { it.item == item }

    if (state != null) {
        holder.restore(state)
    }
}

Java

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    ...
    Item item = items[position];
    Arrays.stream(states).filter(state -> state.item == item)
        .findFirst()
        .ifPresent(state -> holder.restore(state));
}

खास बातें

  • RecyclerView.Adapter#setStateRestorationPolicy(): यह तय करता है कि कॉन्फ़िगरेशन में बदलाव होने के बाद, a RecyclerView.Adapter अपनी स्थिति को कैसे वापस लाता है.
  • ViewModel: किसी गतिविधि या फ़्रैगमेंट की स्थिति को सेव करता है.

इस गाइड को शामिल करने वाले कलेक्शन

यह गाइड, चुनी गई उन क्विक गाइड कलेक्शन का हिस्सा है जिनमें Android डेवलपमेंट के बड़े लक्ष्यों के बारे में बताया गया है:

अपने ऐप्लिकेशन को टैबलेट, फ़ोल्ड किए जा सकने वाले डिवाइसों, और ChromeOS डिवाइसों पर, ऑप्टिमाइज़ किए गए उपयोगकर्ता अनुभव के साथ काम करने की सुविधा दें.

कोई सवाल पूछना है या सुझाव/राय देनी है

अक्सर पूछे जाने वाले सवाल वाले पेज पर जाएं और क्विक गाइड के बारे में जानें. इसके अलावा, हमसे संपर्क करें और अपनी राय या सुझाव के बारे में बताएं.