RecyclerView
कम से कम ग्राफ़िक रिसॉर्स का इस्तेमाल करके, ज़्यादा डेटा दिखा सकता है. जब उपयोगकर्ता RecyclerView
में मौजूद आइटम को स्क्रोल करते हैं, तो View
स्क्रीन से बाहर स्क्रोल किए गए आइटम के इंस्टेंस का फिर से इस्तेमाल किया जाता है. ऐसा, स्क्रीन पर स्क्रोल किए जाने पर नए आइटम बनाने के लिए किया जाता है. हालांकि, कॉन्फ़िगरेशन में हुए बदलाव, जैसे कि डिवाइस के रोटेशन से, RecyclerView
की स्थिति रीसेट हो सकती है. इससे, उपयोगकर्ताओं को आइटम की सूची में अपनी पिछली जगह पर फिर से स्क्रोल करना पड़ता है.
कॉन्फ़िगरेशन में होने वाले सभी बदलावों के दौरान, RecyclerView
की स्थिति, खास तौर पर स्क्रोल की स्थिति और सूची के एलिमेंट की स्थिति में कोई बदलाव नहीं होना चाहिए.
स्थिति बनाए रखना
RecyclerView
स्क्रोल पोज़िशन को सेव करने के लिए, RecyclerView.Adapter
की स्थिति को पहले जैसा करने की नीति सेट करें. 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()
: इससे पता चलता है कि कॉन्फ़िगरेशन में बदलाव होने के बाद,RecyclerView.Adapter
अपनी स्थिति को कैसे वापस लाता है.ViewModel
: किसी गतिविधि या फ़्रैगमेंट की स्थिति को सेव करता है.
नतीजे
अब आपके RecyclerView
में, स्क्रोल की स्थिति और RecyclerView
की सूची में मौजूद हर आइटम की स्थिति को वापस लाया जा सकता है.
ऐसे संग्रह जिनमें यह गाइड शामिल है
यह गाइड, चुने गए क्विक गाइड के कलेक्शन का हिस्सा है. इसमें Android डेवलपमेंट के बड़े लक्ष्यों के बारे में बताया गया है:
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=hi)