RecyclerView অবস্থা পরিচালনা করুন

RecyclerView ন্যূনতম গ্রাফিকাল সংস্থান ব্যবহার করে প্রচুর পরিমাণে ডেটা প্রদর্শন করতে পারে। ব্যবহারকারীরা RecyclerView -তে আইটেমগুলির মাধ্যমে স্ক্রোল করার সময়, স্ক্রীন থেকে স্ক্রোল করা আইটেমগুলির দৃষ্টান্তগুলি View যখন তারা স্ক্রিনে স্ক্রোল করে তখন নতুন আইটেম তৈরি করতে পুনরায় ব্যবহার করা হয়। কিন্তু কনফিগারেশন পরিবর্তন, যেমন ডিভাইস ঘূর্ণন, একটি RecyclerView এর অবস্থা পুনরায় সেট করতে পারে, যা ব্যবহারকারীদের আবার আইটেমগুলির তালিকায় তাদের পূর্ববর্তী অবস্থানে স্ক্রোল করতে বাধ্য করে।

RecyclerView এর অবস্থা বজায় রাখা উচিত - বিশেষ করে, স্ক্রোল অবস্থান - এবং সমস্ত কনফিগারেশন পরিবর্তনের সময় এর তালিকা উপাদানগুলির অবস্থা।

রাষ্ট্র বজায় রাখুন

RecyclerView স্ক্রোল অবস্থান সংরক্ষণ করতে RecyclerView.Adapter এর রাষ্ট্র পুনরুদ্ধার নীতি সেট করুন। RecyclerView তালিকা আইটেমগুলির অবস্থা সংরক্ষণ করুন। RecyclerView অ্যাডাপ্টারে তালিকার আইটেমগুলির অবস্থা যোগ করুন এবং তালিকা আইটেমগুলির অবস্থা পুনরুদ্ধার করুন যখন তারা একটি ViewHolder এর সাথে আবদ্ধ হয়।

1. 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 ব্যবহার করুন.

3. Adapter তালিকা আইটেমের অবস্থা যোগ করুন

আপনার RecyclerView.Adapter এ তালিকা আইটেমগুলির অবস্থা যোগ করুন। যখন আপনার হোস্ট Activity বা Fragment তৈরি করা হয় তখন অ্যাডাপ্টার কনস্ট্রাক্টরের কাছে আইটেমের অবস্থা পাস করুন:

কোটলিন

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

জাভা

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

4. অ্যাডাপ্টারের 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 : একটি কার্যকলাপ বা খণ্ডের জন্য অবস্থা ধরে রাখে।

ফলাফল

আপনার RecyclerView এখন তার স্ক্রোল অবস্থান এবং RecyclerView তালিকার প্রতিটি আইটেমের অবস্থা পুনরুদ্ধার করতে সক্ষম।

এই নির্দেশিকা ধারণকারী সংগ্রহ

এই নির্দেশিকাটি এই কিউরেট করা কুইক গাইড সংগ্রহের অংশ যা বৃহত্তর অ্যান্ড্রয়েড উন্নয়ন লক্ষ্যগুলি কভার করে:

ট্যাবলেট, ফোল্ডেবল এবং ChromeOS ডিভাইসে একটি অপ্টিমাইজড ব্যবহারকারীর অভিজ্ঞতা সমর্থন করতে আপনার অ্যাপ সক্ষম করুন।

প্রশ্ন বা প্রতিক্রিয়া আছে

আমাদের প্রায়শই জিজ্ঞাসিত প্রশ্ন পৃষ্ঠায় যান এবং দ্রুত গাইড সম্পর্কে জানুন বা যোগাযোগ করুন এবং আপনার চিন্তাভাবনা আমাদের জানান।