ডায়নামিক তালিকা কাস্টমাইজ করা   Android Jetpack-এর অংশ।

Compose-এর মাধ্যমে চেষ্টা করুন
Jetpack Compose হল Android-এর জন্য সাজেস্ট করা UI টুলকিট। Compose-এ লেআউট নিয়ে কীভাবে কাজ করতে হয় তা জানুন।

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

লেআউট পরিবর্তন করুন

RecyclerView স্ক্রিনে আলাদা আলাদা আইটেম পজিশন করতে এবং ব্যবহারকারী আর দেখতে পাচ্ছেন না এমন আইটেম ভিউ কখন আবার ব্যবহার করা হবে তা নির্ধারণ করতে লেআউট ম্যানেজার ব্যবহার করে। কোনও ভিউ আবার ব্যবহার করতে—বা রিসাইকেল করতে—লেআউট ম্যানেজার অ্যাডাপ্টারকে ডেটাসেট থেকে অন্য কোনও এলিমেন্ট দিয়ে ভিউয়ের কন্টেন্ট পরিবর্তন করতে বলতে পারে। এইভাবে ভিউ রিসাইকেল করলে, অপ্রয়োজনীয় ভিউ তৈরি করা বা findViewById() লুকআপের মতো ব্যয়বহুল কাজ এড়িয়ে পারফর্ম্যান্স উন্নত করা যায়। Android সাপোর্ট লাইব্রেরিতে তিনটি স্ট্যান্ডার্ড লেআউট ম্যানেজার অন্তর্ভুক্ত থাকে, যার প্রত্যেকটি অনেক কাস্টমাইজেশন বিকল্প অফার করে:

  • LinearLayoutManager: আইটেমগুলিকে এক-মাত্রিক তালিকায় সাজায়। LinearLayoutManager-এর সাথে RecyclerView ব্যবহার করলে ListView লেআউটের মতো ফাংশনালিটি পাওয়া যায়।
  • GridLayoutManager: আইটেমগুলিকে দ্বিমাত্রিক গ্রিডে সাজায়, যেমন দাবার বোর্ডের বর্গক্ষেত্র। GridLayoutManager-এর সাথে RecyclerView ব্যবহার করলে GridView লেআউটের মতো কার্যকারিতা পাওয়া যায়।
  • StaggeredGridLayoutManager: আইটেমগুলিকে একটি দ্বি-মাত্রিক গ্রিডে সাজায়, প্রতিটি কলাম আগেরটির থেকে সামান্য অফসেট থাকে, যেমন আমেরিকান পতাকার তারাগুলি।

এইসব লেআউট ম্যানেজার আপনার প্রয়োজন পূরণ করতে না পারলে, আপনি RecyclerView.LayoutManager অ্যাবস্ট্রাক্ট ক্লাস বাড়িয়ে নিজের লেআউট ম্যানেজার তৈরি করতে পারবেন।

আইটেম অ্যানিমেশন যোগ করুন

কোনও আইটেম পরিবর্তন হলে, RecyclerView সেটির চেহারা পরিবর্তন করতে অ্যানিমেটর ব্যবহার করে। এই অ্যানিমেটর হল একটি অবজেক্ট যা অ্যাবস্ট্রাক্ট RecyclerView.ItemAnimator ক্লাসকে এক্সটেন্ড করে। ডিফল্ট হিসেবে, RecyclerView DefaultItemAnimator ব্যবহার করে অ্যানিমেশন প্রদান করে। আপনি কাস্টম অ্যানিমেশন প্রদান করতে চাইলে, RecyclerView.ItemAnimator এক্সটেন্ড করে আপনার নিজস্ব অ্যানিমেটর অবজেক্ট সংজ্ঞায়িত করতে পারবেন।

তালিকার আইটেম বেছে নেওয়ার সুবিধা চালু করুন

recyclerview-selection লাইব্রেরি ব্যবহারকারীদের টাচ বা মাউস ইনপুট ব্যবহার করে RecyclerView তালিকা থেকে আইটেম বেছে নিতে দেয়। এটি আপনাকে বেছে নেওয়া আইটেমের ভিজ্যুয়াল প্রেজেন্টেশনের উপর নিয়ন্ত্রণ বজায় রাখতে সাহায্য করে। এছাড়াও, আপনি বেছে নেওয়ার আচরণ নিয়ন্ত্রণকারী নীতির উপর নিয়ন্ত্রণ বজায় রাখতে পারেন, যেমন কোন আইটেম বেছে নেওয়ার জন্য উপযুক্ত এবং কতগুলি আইটেম বেছে নেওয়া যেতে পারে।

RecyclerView ইনস্ট্যান্সে সিলেকশন সাপোর্ট যোগ করতে, এইসব ধাপ অনুসরণ করুন:

  1. কোন ধরনের সিলেকশন কী ব্যবহার করবেন তা নির্ধারণ করুন, তারপর একটি ItemKeyProvider তৈরি করুন।

    বেছে নেওয়া আইটেম শনাক্ত করার জন্য আপনি তিন ধরনের কী ব্যবহার করতে পারবেন:

    নির্বাচন-কী-এর ধরন সম্পর্কে বিস্তারিত তথ্যের জন্য, SelectionTracker.Builder দেখুন।

  2. ItemDetailsLookup প্রয়োগ করুন।
  3. ItemDetailsLookup, MotionEvent-এর জন্য RecyclerView আইটেম সম্পর্কে তথ্য অ্যাক্সেস করার জন্য সিলেকশন লাইব্রেরিকে অনুমতি দেয়। এটি আসলে ItemDetails ইনস্ট্যান্সের জন্য একটি ফ্যাক্টরি যা RecyclerView.ViewHolder ইনস্ট্যান্স থেকে ব্যাক-আপ নেওয়া বা এক্সট্র্যাক্ট করা হয়।

  4. আইটেম আপডেট করুন RecyclerView-এ View অবজেক্ট ব্যবহারকারী বেছে নিয়েছেন নাকি বেছে নেননি তা দেখানোর জন্য।

    বাছাই করা আইটেমের জন্য সিলেকশন লাইব্রেরি ডিফল্ট ভিজ্যুয়াল ডেকোরেশন প্রদান করে না। আপনি onBindViewHolder() প্রয়োগ করার সময় এটি প্রদান করুন। আমরা নিম্নলিখিত পদ্ধতি অনুসরণ করতে সাজেস্ট করি:

    • onBindViewHolder()-এ, setActivated()—নয় setSelected()—কল করুন View অবজেক্টে true বা false-এর সাথে, আইটেমটি বেছে নেওয়া হয়েছে কিনা তার উপর নির্ভর করে।
    • অ্যাক্টিভেট করা স্ট্যাটাস দেখানোর জন্য ভিউয়ের স্টাইলিং আপডেট করুন। স্টাইলিং কনফিগার করার জন্য আমরা কালার স্টেট লিস্ট রিসোর্স ব্যবহার করার সাজেশন দিই।
  5. ActionMode ব্যবহার করুন যাতে ব্যবহারকারীকে টুল প্রদান করা যায় যার মাধ্যমে তিনি বেছে নেওয়া আইটেমের উপর অ্যাকশন নিতে পারেন।
  6. একটি SelectionTracker.SelectionObserver রেজিস্টার করুন যাতে কোনও বাছাই পরিবর্তন হলে বিজ্ঞপ্তি পাঠানো যায়। কোনও সিলেকশন প্রথমবার তৈরি করা হলে, ব্যবহারকারীকে এটি দেখানোর জন্য ActionMode শুরু করুন এবং সিলেকশন-নির্দিষ্ট অ্যাকশন প্রদান করুন। যেমন, আপনি ActionMode বারে একটি 'মুছুন' বোতাম যোগ করতে পারেন এবং বেছে নেওয়া আইটেম মুছে দিতে বারে থাকা 'ফিরে যান' তীরচিহ্নটি কানেক্ট করতে পারেন। বেছে নেওয়া আইটেম খালি হয়ে গেলে—ব্যবহারকারী শেষবার বেছে নেওয়া আইটেম মুছে দিলে—অ্যাকশন মোড বন্ধ করুন।

  7. ব্যাখ্যা করা হয়েছে এমন যেকোনও সেকেন্ডারি অ্যাকশন পারফর্ম করা।
  8. ইভেন্ট প্রসেসিং পাইপলাইনের শেষে, লাইব্রেরি নির্ধারণ করতে পারে যে ব্যবহারকারী কোনও আইটেম ট্যাপ করে সেটি অ্যাক্টিভেট করার চেষ্টা করছেন অথবা কোনও আইটেম বা বেছে নেওয়া আইটেমের সেট ড্র্যাগ করার চেষ্টা করছেন। উপযুক্ত লিসেনার রেজিস্টার করে এইসব ইন্টারপ্রিটেশনে প্রতিক্রিয়া জানান। আরও তথ্যের জন্য, SelectionTracker.Builder দেখুন।

  9. SelectionTracker.Builder-এর মাধ্যমে সবকিছু অ্যাসেম্বল করুন।
  10. এইসব তথ্য কীভাবে একসাথে ব্যবহার করতে হয় তা নিম্নলিখিত উদাহরণ থেকে দেখুন:

    Kotlin

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    জাভা

        SelectionTracker tracker = new SelectionTracker.Builder<>(
                "my-selection-id",
                recyclerView,
                new StableIdKeyProvider(recyclerView),
                new MyDetailsLookup(recyclerView),
                StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build();
        

    SelectionTracker ইনস্ট্যান্স তৈরি করতে, আপনার অ্যাপকে অবশ্যই একই RecyclerView.Adapter সরবরাহ করতে হবে যা আপনি RecyclerView থেকে SelectionTracker.Builder-এ শুরু করতে ব্যবহার করেন। এই কারণে, আপনি SelectionTracker ইনস্ট্যান্স তৈরি করার পরে, এটি আপনার RecyclerView.Adapter-এ ইনজেক্ট করুন। অন্যথায়, আপনি onBindViewHolder() পদ্ধতি থেকে কোনও আইটেমের বেছে নেওয়া স্ট্যাটাস চেক করতে পারবেন না।

  11. অ্যাক্টিভিটি লাইফসাইকেল ইভেন্টে বেছে নেওয়া আইটেম অন্তর্ভুক্ত করুন।
  12. অ্যাক্টিভিটি লাইফসাইকেল ইভেন্ট জুড়ে বেছে নেওয়ার স্ট্যাটাস বজায় রাখতে, আপনার অ্যাপকে অবশ্যই অ্যাক্টিভিটির onSaveInstanceState() এবং onRestoreInstanceState() মেথড থেকে যথাক্রমে সিলেকশন ট্র্যাকারের onSaveInstanceState() এবং onRestoreInstanceState() মেথড কল করতে হবে। এছাড়াও, আপনার অ্যাপকে অবশ্যই SelectionTracker.Builder কনস্ট্রাক্টরে একটি অনন্য সিলেকশন আইডি প্রদান করতে হবে। এই আইডি প্রয়োজন কারণ কোনও অ্যাক্টিভিটি বা ফ্র্যাগমেন্টে একাধিক স্বতন্ত্র, বেছে নেওয়ার মতো তালিকা থাকতে পারে, যার সবকটিই সেভ করা অবস্থায় রাখতে হবে।

অতিরিক্ত রিসোর্স

অতিরিক্ত তথ্যের জন্য নিম্নলিখিত রেফারেন্স দেখুন।