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()
: इससे यह तय होता है कि कॉन्फ़िगरेशन में बदलाव होने के बाद,RecyclerView.Adapter
अपनी स्थिति को कैसे वापस लाता है.ViewModel
: यह किसी गतिविधि या फ़्रैगमेंट के लिए स्थिति को सेव करता है.
ऐसे कलेक्शन जिनमें यह गाइड शामिल है
यह गाइड, चुनी गई क्विक गाइड के इन कलेक्शन का हिस्सा है. इनमें Android डेवलपमेंट के ज़्यादातर लक्ष्यों के बारे में बताया गया है:
