RecyclerView ন্যূনতম গ্রাফিক্যাল রিসোর্স ব্যবহার করে প্রচুর পরিমাণে ডেটা প্রদর্শন করতে পারে। ব্যবহারকারীরা যখন RecyclerView এ আইটেমগুলি স্ক্রোল করেন, তখন স্ক্রিন থেকে স্ক্রোল করা আইটেমগুলির View উদাহরণগুলি স্ক্রিনে স্ক্রোল করার সাথে সাথে নতুন আইটেম তৈরি করতে পুনরায় ব্যবহার করা হয়। কিন্তু ডিভাইস ঘূর্ণনের মতো কনফিগারেশন পরিবর্তনগুলি RecyclerView এর অবস্থা পুনরায় সেট করতে পারে, যার ফলে ব্যবহারকারীরা আইটেমগুলির তালিকাতে আবার তাদের পূর্ববর্তী অবস্থানে স্ক্রোল করতে বাধ্য হয়।
সমস্ত কনফিগারেশন পরিবর্তনের সময় RecyclerView এর অবস্থা - বিশেষ করে স্ক্রোল অবস্থান - এবং তালিকার উপাদানগুলির অবস্থা বজায় রাখা উচিত।
ফলাফল
আপনার RecyclerView তার স্ক্রোল অবস্থান এবং RecyclerView তালিকার প্রতিটি আইটেমের অবস্থা পুনরুদ্ধার করতে সক্ষম।
সংস্করণের সামঞ্জস্য
এই বাস্তবায়নটি সমস্ত API স্তরের সাথে সামঞ্জস্যপূর্ণ।
নির্ভরতা
কোনোটিই নয়।
অবস্থা বজায় রাখুন
RecyclerView.Adapter এর স্টেট রিস্টোরেশন পলিসি সেট করে RecyclerView স্ক্রোল পজিশন সেভ করুন। RecyclerView লিস্ট আইটেমের স্টেট সেভ করুন। RecyclerView অ্যাডাপ্টারে লিস্ট আইটেমের স্টেট যোগ করুন এবং লিস্ট আইটেম ViewHolder সাথে আবদ্ধ হলে সেগুলোর স্টেট রিস্টোর করুন।
১. Adapter অবস্থা পুনরুদ্ধার নীতি সক্ষম করুন
RecyclerView অ্যাডাপ্টারের স্টেট রিস্টোরেশন পলিসি সক্রিয় করুন যাতে কনফিগারেশন পরিবর্তনের সময় RecyclerView এর স্ক্রলিং পজিশন বজায় থাকে। অ্যাডাপ্টার কনস্ট্রাক্টরে পলিসি স্পেসিফিকেশন যোগ করুন:
কোটলিন
class MyAdapter() : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
init {
stateRestorationPolicy = StateRestorationPolicy.PREVENT_WHEN_EMPTY
}
...
}
জাভা
class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public Adapter() {
setStateRestorationPolicy(StateRestorationPolicy.PREVENT_WHEN_EMPTY);
}
...
}
2. স্টেটফুল তালিকার আইটেমগুলির অবস্থা সংরক্ষণ করুন
জটিল RecyclerView তালিকার আইটেমগুলির অবস্থা সংরক্ষণ করুন, যেমন EditText উপাদান ধারণকারী আইটেম। উদাহরণস্বরূপ, EditText এর অবস্থা সংরক্ষণ করতে, টেক্সট পরিবর্তনগুলি ক্যাপচার করার জন্য একটি onClick হ্যান্ডলারের মতো একটি কলব্যাক যোগ করুন। কলব্যাকের মধ্যে, কোন ডেটা সংরক্ষণ করতে হবে তা নির্ধারণ করুন:
কোটলিন
input.addTextChangedListener(
afterTextChanged = { text ->
text?.let {
// Save state here.
}
}
)
জাভা
input.addTextChangedListener(new TextWatcher() {
...
@Override
public void afterTextChanged(Editable s) {
// Save state here.
}
});
আপনার Activity অথবা Fragment এ কলব্যাক ঘোষণা করুন। অবস্থা সংরক্ষণ করতে একটি ViewModel ব্যবহার করুন।
৩. Adapter তালিকা আইটেমের অবস্থা যোগ করুন
আপনার RecyclerView.Adapter এ তালিকার আইটেমের অবস্থা যোগ করুন। আপনার হোস্ট Activity বা Fragment তৈরি হলে আইটেমের অবস্থা অ্যাডাপ্টার কনস্ট্রাক্টরে দিন:
কোটলিন
val adapter = MyAdapter(items, viewModel.retrieveState())
জাভা
MyAdapter adapter = new MyAdapter(items, viewModel.retrieveState());
৪. অ্যাডাপ্টারের ViewHolder তালিকা আইটেমের অবস্থা পুনরুদ্ধার করুন
RecyclerView.Adapter এ, যখন আপনি একটি ViewHolder কে একটি আইটেমের সাথে সংযুক্ত করেন, তখন আইটেমটির অবস্থা পুনরুদ্ধার করুন:
কোটলিন
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)
}
}
জাভা
@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: একটি কার্যকলাপ বা খণ্ডের জন্য অবস্থা ধরে রাখে।
এই নির্দেশিকা ধারণকারী সংগ্রহগুলি
এই নির্দেশিকাটি এই কিউরেটেড কুইক গাইড সংগ্রহের অংশ যা বৃহত্তর অ্যান্ড্রয়েড ডেভেলপমেন্ট লক্ষ্যগুলিকে অন্তর্ভুক্ত করে:
