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

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

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

ফলাফল

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

অবস্থা বজায় রাখুন

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

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

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

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

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

আমাদের প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী পৃষ্ঠায় যান এবং দ্রুত নির্দেশিকা সম্পর্কে জানুন অথবা যোগাযোগ করুন এবং আপনার মতামত আমাদের জানান।
,

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

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

ফলাফল

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

অবস্থা বজায় রাখুন

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

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

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

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

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

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