আমাদের তালিকাগুলি প্রতিস্থাপনের জন্য রিসাইক্লার ভিউ ব্যবহার করা উচিত?


232

অ্যান্ড্রয়েড ডক্স বলে:

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

ListViewকার্যকারিতা গুরুত্বপূর্ণ না হলে প্রকৃতপক্ষে উপরের সবগুলিই করতে পারেন এবং আমরা RecyclerViewপ্রতিস্থাপনের জন্য ব্যবহার করার সময় আমরা অনেকগুলি সমস্যা খুঁজে পেয়েছি ListView:

  1. তালিকা আইটেম নির্বাচন - সমাধানের জন্য কোনও আইটেমিক্লিকলিস্টার () নেই

  2. তালিকা আইটেমগুলির মধ্যে কোনও বিভাজক নয় - সমাধান

  3. কোনও অন্তর্নির্মিত ওভারল্যাপ নির্বাচনকারী নয়, আপনি তালিকা আইটেম - সমাধান ক্লিক করলে কোনও ভিজ্যুয়াল প্রতিক্রিয়া নেই is

  4. তালিকা শিরোনামের জন্য কোনও অ্যাডহাইডারভিউ নেই - সমাধান

হতে পারে আরও সমস্যা ...

সুতরাং যখন আমরা RecyclerViewপ্রতিস্থাপন করতে ব্যবহার করি ListView, তখন একই প্রভাবকে পৌঁছানোর জন্য আমাদের আরও অনেক বেশি কোডিং করতে হবে ListView

প্রশ্ন:

  • এটা মূল্য যে আমরা প্রতিস্থাপন হয় ListViewসঙ্গে RecyclerViewসম্পূর্ণভাবে?
  • যদি না হয় তবে আমাদের ক্ষেত্রে এর RecyclerViewপরিবর্তে আরও কী ভাল ব্যবহার করা উচিত ListView?

9
আপনার থ্রেডটি কেবল প্রথম ইস্যু, এবং আমার প্রশ্ন নয়
Xcihnegn

3
কেবল উল্লেখ করুন যে আপনি যদি ধসে পড়া অ্যাকশন বারটি ব্যবহার করতে আগ্রহী হন তবে আপনাকে অবশ্যই একটি পুনর্ব্যবহারযোগ্য ভিউ ব্যবহার করতে হবে। medium.com/android-bites/...
francas

আপনার পুনর্ব্যবহারযোগ্য পর্যালোচনাটি ব্যবহার করা উচিত কারণ এটি তালিকার চেয়ে বেশি নিয়ন্ত্রণ সরবরাহ করে। এটি লিট বিট জটিল তবে আপনি সেখানে পৌঁছে যাবেন যখনই আপনি তালিকার ধরণের জিনিস নিয়ে কাজ করছেন আপনার জীবন অত্যন্ত সহজ হবে।
সদাশিব

3
ভাল ভাল শত্রু।
oldgod

উত্তর:


118

যদি তালিকাভিউ আপনার পক্ষে কাজ করে তবে মাইগ্রেশন করার কোনও কারণ নেই। আপনি যদি একটি নতুন ইউআই লিখছেন, তবে আপনি রিসাইক্লার ভিউয়ের সাথে আরও ভাল।

আপনার তালিকাটি কাস্টমাইজ করতে বা আপনি আরও ভাল অ্যানিমেশনগুলি চাইলে রিসাইক্লারভিউ শক্তিশালী। তালিকাভিউতে এই সুবিধাগুলি পদ্ধতিগুলি লোকেদের জন্য প্রচুর সমস্যা সৃষ্টি করেছিল যার কারণেই রিসাইক্লারভিউ তাদের জন্য আরও নমনীয় সমাধান সরবরাহ করে।

মাইগ্রেশনের জন্য আপনার যে বড় পরিবর্তনটি করতে হবে তা হ'ল আপনার অ্যাডাপ্টারে। যদি আপনি কলিং চালিয়ে যেতে চান তবে আপনি notifyDataSetChangedবেশিরভাগ অ্যানিমেশন এবং বাঁধাইয়ের সুবিধা হারাবেন। তবে আপনি যদি বিশদ বিজ্ঞপ্তি ইভেন্টগুলি যুক্ত (অ্যাড / সরানো / সরানো / আপডেট হওয়া) প্রেরণ করতে আপনার অ্যাডাপ্টার পরিবর্তন করতে পারেন তবে আপনি আরও ভাল অ্যানিমেশন এবং পারফরম্যান্স পাবেন। এই ইভেন্টগুলি রিসাইক্লারভিউকে সঠিক অ্যানিমেশনগুলি চয়ন করতে দেয় এবং এটি এটি অপ্রয়োজনীয় onBindকলগুলি এড়াতে সহায়তা করে । আপনার আইটেমের ভিউগুলি জটিল হলে আপনি একটি বিশাল সুবিধা পাবেন। এছাড়াও, এগিয়ে যাওয়া, রিসাইক্লিউউউ এর চারপাশে আরও বেশি উপাদান থাকবে।


2
আমি যদি আপনাকে 100 টি upvotes দিতে পারে আমি। notifyDataSetChanged()পদ্ধতি আমার গচ্চা গেল RecyclerViewনতুন চাওয়ার রাখার ViewHoldersসব সময় সুফল gutting ViewHolderপ্যাটার্ন। সমাধানটির সন্ধানে আমি আপনার মন্তব্য পেয়েছি যা আমার সমস্যার উত্তীর্ণ হওয়ার ক্ষেত্রে বেশ জবাব দেয়: ডি ধন্যবাদ!
উচ্চাকাঙ্ক্ষী দেব

আমি সম্মত নই "আপনার আইটেমের ভিউগুলি জটিল হলে আপনি একটি বিশাল উপকার পাবেন", আমার রিসাইক্লারভিউ রয়েছে যাতে অ্যাডাপ্টারে 3 থাকে অন্যথায়, আমার ক্ষেত্রে রিসাইক্লিউভিউ খারাপভাবে সম্পাদন করে। আমাকে ব্যবহার করে পুনর্ব্যবহারযোগ্য অক্ষম করতে হয়েছিল isRecyclable(false);এবং চূড়ান্ত ফলাফলটি হ'ল রিসাইক্লারভিউ la আমি এটিও পরিবর্তন করতে পারি না,
তালিকাভিউতে

4
লোকেরা আরভি ডাব্লু / আরও অনেক ধরণের ব্যবহার করে তারপরে যে কোনও সমস্যা এবং ভাল পারফরম্যান্স w আপনার কোডে অন্য কিছু ভুল আছে। আপনার সিস্টেস্ট / ট্রেসভিউ ব্যবহার করা উচিত এবং কী চলছে তা দেখতে হবে।
ইজিগিত

1
@ কাশ্যপজিমুলিয়া ইয়িগিত হিসাবে উল্লেখ করেছেন, ৩ যদি অন্যথায় না হয় that প্রথমত, আপনি উল্লেখ করেননি যে আপনি কোথায় এগুলি রেখেছিলেন-অন্যথায়; দ্বিতীয়ত, পুনর্ব্যবহারযোগ্য অক্ষম করা এটির চেয়ে ধীর হওয়া উচিত। কেন? কারণ কোনও ভিউতে স্ফীত হওয়া এবং করা এইভাবে করার findViewById()চেয়ে অনেক ব্যয়বহুল ViewHolder
সুফিয়ান

24

আমার মতে, যদি তালিকাভিউ আপনার অ্যাপ্লিকেশনের সমস্ত বর্তমান চাহিদা পূরণ করে এবং সমস্ত ব্যবহারের ক্ষেত্রে সন্তুষ্ট হয় তবে এটি পুনরায় ব্যবহারকারীর সাথে প্রতিস্থাপন করার দরকার নেই।

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

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

আমি এখানে এই বিষয়ে একটি বিস্তারিত উত্তর লিখেছি ।


3
অবশ্যই, পুনর্ব্যবহারযোগ্য ভিউ জটিলতা বাড়ায় তবে কমপক্ষে এটি আপনার জন্য ভিউহোল্ডার প্যাটার্নটি যথাযথভাবে প্রয়োগ করে।
ইগোরগানাপলস্কি

ভিউহোল্ডার প্যাটার্ন বাস্তবায়নের জন্য @ ইগরগানাপলস্কি +1।
শ্রীকান্ত করুণাঘাট

আপনি আপনার নিজের দৃশ্য ধারক প্যাটার্ন ঠিক সূক্ষ্ম একটি ListView সঙ্গে লিখতে পারেন
Dan

9

1 আপনি ক্লিক শ্রোতাদের সরবরাহ করতে একটি ইন্টারফেস ব্যবহার করতে পারেন। আমিও লাস্টভিউগুলির সাথে এই কৌশলটি ব্যবহার করি।
2 কোনও বিভাজক নেই: কেবল আপনার সারিতে ম্যাচ_প্যারেন্টের প্রস্থ এবং 1 ডিপি এর উচ্চতা সহ একটি দৃশ্য যুক্ত করুন এবং এটি একটি পটভূমির রঙ দিন
3 সারি পটভূমির জন্য কেবল স্টেটলিস্ট নির্বাচনকারী ব্যবহার করুন।
4 অ্যাডহাইডারভিউ তালিকার ভিউগুলিতেও এড়ানো যায়: কেবল শিরোনামকে বাইরে রাখুন

সুতরাং, যদি দক্ষতা আপনার উদ্বেগ, তবে হ্যাঁ , একটি তালিকার ভিউটিকে একটি পুনর্ব্যবহারযোগ্য সাথে প্রতিস্থাপন করা ভাল ধারণা a


19
এগুলি আমার প্রশ্ন নয়, প্রতিটি ইস্যু সমাধানের জন্য আমার লিঙ্ক ছিল
এক্সসিহনেগ

6

আমি এখনও খুব সাধারণ তালিকার জন্য তালিকার ভিউ ব্যবহার করে আসছি। উদাহরণস্বরূপ যদি আমি পাঠ্যের বিকল্পগুলির একটি সহজ তালিকা প্রদর্শন করতে চাই ...

আমি সেই সিদ্ধান্তটি 'মানবিক কারণের' উপর ভিত্তি করে তৈরি করেছি, পারফরম্যান্স যদি অবিরাম হয় তবে কম কোড সহ একটি সাধারণ তালিকাভিউ তৈরি করা আরও ভাল। আমি প্রায়শই কলেজের এমন একজন প্রফেসরের কথা ভাবি যাঁর এই কথাটি শখ ছিল: "আমার শিক্ষক গ্রেট নিক্লাস রাইথ, পাস্কালের উদ্ভাবক, বলতেন যে কোনও প্রোগ্রামে যদি 50 টিরও বেশি কোডের লাইন থাকে তবে তা অবশ্যই ভুল বলে নিশ্চিত ..."

তবে আমাকে তালিকাভিউ ব্যবহার বন্ধ করতে যে বিষয়টি বোঝাতে পেরেছিল তা হ'ল এটি সম্প্রতি রিলেটিভলআউট সহ অ্যান্ড্রয়েড স্টুডিও ডিজাইন সরঞ্জামের "উত্তরাধিকার" বিভাগে স্থানান্তরিত হয়েছে।

https://developer.android.com/reference/android/widget/ListView

আমি মনে করি এটি 'অবচয়' এর 'নরম' রূপ। এটি সত্যিকারের অবমূল্যায়ন করা হলে এবং সমস্ত বিবেকবান বিকাশকারীরা তাদের কোডটিকে রিসাইক্লারভিউতে সরানো হলে এটি খুব বিঘ্নজনক হবে।

আরও, তালিকাভিউতে অন্তর্ভুক্তিটি শীর্ষে সতর্ক করে যে রিসাইক্লারভিউ একটি ভাল বিকল্প: "আরও বেশি আধুনিক, নমনীয় এবং তালিকাগুলি প্রদর্শন করার জন্য পারফরম্যান্ট পদ্ধতির জন্য, পুনর্ব্যবহারযোগ্য ব্যবহার করুন" "
https://developer.android.com/reference/android/widget/ListView

এছাড়াও, তালিকাভিউ-তে গাইড এখনও কার্সার লোডার সম্পর্কে কথা বলছে, তবে তারপরে getSupportCursorLoader () নিজেই এপিআই 28-এ অবচয় করা হয়েছে।
https://developer.android.com/guide/topics/ui/layout/listview

অ্যান্ড্রয়েড স্টুডিওতে সাম্প্রতিক বর্ধনসমূহ:

ফাইল -> নতুন -> খণ্ড -> খণ্ড (তালিকা)

এটি আমাদেরকে মৌলিক পাঠ্যের সাহায্যে একটি সম্পূর্ণরূপে কাজ করা রিসেলারভিউ দেয়। তালিকার ভিউ ব্যবহারের জন্য এটি আমার শেষ আসল কারণ থেকে মুক্তি পেয়েছে কারণ এটি এখন একটি বেসিক রিসেলারভিউ সেটআপ করা ঠিক তত সহজ।

সংক্ষেপে, আমি লাস্টভিউকে নতুন বিকাশের জন্য মোটেও ব্যবহার করার ইচ্ছা করি না কারণ এতে 'উত্তরাধিকার' লেবেলিং হ্রাস করা থেকে এক ধাপ দূরে।


3

তালিকার গতিরোধক বা নেটওয়ার্ক ইভেন্টগুলি দ্বারা প্রভাবিত না হলে কেবলমাত্র তালিকাভিউ ব্যবহার করা ঠিক আছে। উদাহরণস্বরূপ: নেভিগেশন।

অন্য যে কোনও ব্যবহারের জন্য, রিসাইক্লারভিউ তালিকাভিউ গ্রহন করে। যেহেতু রিসাইক্লারভিউ কেবল পুনর্ব্যবহারের বিষয়ে চিন্তা করে তাই তালিকাম ভিউতে দৃ related়ভাবে মিলিত ভিজ্যুয়াল সম্পর্কিত জিনিসগুলি করা সহজতর হবে, যেমন অবস্থান / পুনর্বিন্যাসের পরিবর্তন, অ্যানিমেশন (আসলে এটি রিসাইক্লারভিউ.আইটেমএনিমেটরের সাথে আসে), কাস্টম লেআউটগুলি (স্টকটি স্ট্যাগ্রার্ডগ্রিড ছাড়াও রয়েছে) পুরাতন তালিকা বা গ্রিড শৈলী কিন্তু এই লাইব্রেরিটি রয়েছে যা এটি আরও প্রসারিত করে)।

এছাড়াও আপনি যদি কার্ডভিউ ব্যবহার করতে চান তবে আমি বিশ্বাস করি এটিই একমাত্র উপায় ( কার্ড বা তালিকা ব্যবহার করার সময় কিছুটা ভাল পড়া )।


আপনি কি সার্ভারগুলি থেকে ডেটাগুলির একটি তালিকা দখল করার কথা উল্লেখ করছেন, তারপরে ফোনে স্ক্য্লাইটে সঞ্চিত একটি তালিকা প্রদর্শনে ব্যবহার করতে পারেন (আপনার অনুগামীদের বলতে দিন) কোনও ভিউধারীর সাথে তালিকার চেয়ে রিসাইক্লার ভিউ ব্যবহার করা ভাল view ?
সিংহ 789

হ্যাঁ. তবে সুনির্দিষ্টভাবে বলতে গেলে আমি নেভিগেশন ব্যতীত আর তালিকাগুলির জন্য কোনও ভূমিকা দেখতে পাচ্ছি না এবং কারণ আমি মনে করি যে সেখানে পুনর্ব্যবহারযোগ্য ভিউ ব্যবহার করা অত্যধিক দক্ষ।
inmyth

2

একটি দুর্দান্ত বিকল্প বেসএডাপ্টার ব্যবহার করছে। এটি ভিউহোল্ডার প্যাটার্নটি ব্যবহার সমর্থন করে এবং খনিতে বিটম্যাপস এবং বোতামগুলির সাথে 100+ সারি রয়েছে এবং এটি খুব মসৃণ হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.