একটি ডাইনামিক লিস্ট কাস্টমাইজ করুন । এটি অ্যান্ড্রয়েড জেটপ্যাকের একটি অংশ।

কম্পোজ পদ্ধতিটি চেষ্টা করুন
অ্যান্ড্রয়েডের জন্য Jetpack Compose হলো প্রস্তাবিত UI টুলকিট। Compose-এ কীভাবে লেআউট নিয়ে কাজ করতে হয় তা শিখুন।

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

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

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

  • LinearLayoutManager : আইটেমগুলোকে একটি একমাত্রিক তালিকায় সাজায়। RecyclerView এর সাথে LinearLayoutManager ব্যবহার করলে 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() ফাংশনে, আইটেমটি নির্বাচিত হয়েছে কি না তার উপর নির্ভর করে View অবজেক্টের উপর setActivated() কল করুন, setSelected() নয় , এবং মান হিসেবে true বা false ব্যবহার করুন।
    • সক্রিয় অবস্থা বোঝানোর জন্য ভিউটির স্টাইলিং আপডেট করুন। স্টাইলিং কনফিগার করার জন্য আমরা একটি কালার স্টেট লিস্ট রিসোর্স ব্যবহার করার পরামর্শ দিই।
  5. ব্যবহারকারীকে নির্বাচিত অংশের উপর কোনো কাজ সম্পাদন করার জন্য প্রয়োজনীয় সরঞ্জাম সরবরাহ করতে ActionMode ব্যবহার করুন।
  6. নির্বাচন পরিবর্তিত হলে বিজ্ঞপ্তি পেতে একটি SelectionTracker.SelectionObserver রেজিস্টার করুন। যখন প্রথমবার কোনো নির্বাচন তৈরি করা হয়, তখন ব্যবহারকারীর কাছে এটি উপস্থাপন করতে এবং নির্বাচন-নির্দিষ্ট অ্যাকশনগুলো প্রদান করতে ActionMode চালু করুন। উদাহরণস্বরূপ, আপনি ActionMode বারে একটি ডিলিট বাটন যোগ করতে পারেন এবং নির্বাচনটি মুছে ফেলার জন্য বারের ব্যাক অ্যারোটি সংযুক্ত করতে পারেন। যখন নির্বাচনটি খালি হয়ে যায়—যদি ব্যবহারকারী শেষবার নির্বাচনটি মুছে ফেলে—তখন অ্যাকশন মোড বন্ধ করে দিন।

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

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

    কোটলিন

        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 টি SelectionTracker.Builder এ সরবরাহ করতে হবে যা আপনি RecyclerView ইনিশিয়ালাইজ করতে ব্যবহার করেন। এই কারণে, SelectionTracker ইনস্ট্যান্সটি তৈরি করার পরে, এটিকে আপনার RecyclerView.Adapter এ ইনজেক্ট করুন। অন্যথায়, আপনি onBindViewHolder() মেথড থেকে কোনো আইটেমের নির্বাচিত অবস্থা পরীক্ষা করতে পারবেন না।

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

অতিরিক্ত সম্পদ

অতিরিক্ত তথ্যের জন্য নিম্নলিখিত তথ্যসূত্রগুলো দেখুন।