উত্তর:
আপনি বিভিন্ন সারিগুলির জন্য বিভিন্ন ধরণের দর্শন চান সেখানে এগুলি পরিচালনা করে । উদাহরণস্বরূপ, একটি পরিচিতি অ্যাপ্লিকেশনটিতে আপনি এমনকি সারিগুলিকে বাম পাশে ছবি রাখতে এবং বিজোড় সারিগুলিতে ডানদিকে ছবি রাখতে চাইতে পারেন। সেক্ষেত্রে, আপনি ব্যবহার করবেন:
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position % 2;
}
কাঠামোটি আপনার পদ্ধতির মাধ্যমে কোন দর্শন আপনাকে আপনাকে হস্তান্তর করবেconvertViewgetView তা সিদ্ধান্ত নিতে আপনার দর্শন প্রকারটি ব্যবহার করে । অন্য কথায়, উপরের উদাহরণে, আপনার এমনকি সারিগুলি পুনরায় ব্যবহার করতে বাম পাশের চিত্রগুলি সহ পুনর্ব্যবহারযোগ্য ভিউগুলি পাবে এবং বিজোড় সারিগুলি কেবল ডানদিকে ছবিযুক্তগুলি পাবে।
যদি আপনার তালিকার প্রতিটি সারিতে একই লেআউট থাকে তবে আপনাকে দেখার ধরণের বিষয়ে চিন্তা করার দরকার নেই। আসলে, বেসএডাপ্টার.জভা সমস্ত অ্যাডাপ্টারের জন্য একটি ডিফল্ট আচরণ সরবরাহ করে:
public int getItemViewType(int position) {
return 0;
}
public int getViewTypeCount() {
return 1;
}
এটি আপনাকে প্রতিটি সারির জন্য একই দর্শন প্রকার সরবরাহ করে।
সম্পাদনা করুন - সাধারণ প্রবাহের রূপরেখার জন্য:
AdapterViewএকটি অ্যাডাপ্টার ব্যবহার করে আপনার সাথে ডেটা বাঁধেন।AdapterViewচেষ্টা আইটেম ব্যবহারকারীকে কাছে দৃশ্যমান প্রদর্শন।getItemViewTypeসারিটির জন্য কল করে n, এটি সারিটি প্রদর্শন করতে চলেছে।nধরণের দর্শনগুলির জন্য তার পুনর্ব্যবহারযোগ্য ভিউ পুলটি পরীক্ষা করে । এটি কোনও খুঁজে পাচ্ছে না কারণ এখনও পর্যন্ত কোনও মতামত পুনর্ব্যবহার করা হয়নি।getViewসারি জন্য বলা হয় n।getItemViewTypeজন্য আপনি সারিটির জন্য কল করেন n।getViewএবং আপনার সারিটির দৃশ্য ব্যবহারকারীর কাছে প্রদর্শিত হবে।এখন, যখন কোনও দৃশ্য স্ক্রোলটি স্ক্রোল করে পুনর্ব্যবহার করা হয় তখন এটি ফ্রেমওয়ার্ক দ্বারা পরিচালিত একটি পুনর্ব্যবহারযোগ্য ভিউ পুলে যায়। এগুলি মূলত ভিউ টাইপের দ্বারা সংগঠিত করা হয় যাতে convertViewআপনার getViewপদ্ধতির প্যারামিটারে সঠিক ধরণের একটি ভিউ আপনাকে দেওয়া হয় :
getItemViewTypeযে সারিটি প্রদর্শন করতে চায় তা কল করে।convertViewআপনার getViewপদ্ধতির পরামিতি হিসাবে আপনাকে দেওয়া হবে ।আমরা দৃশ্য বিভিন্ন ধরনের দেখানোর জন্য প্রয়োজন ব্যবহার তার ভাল তালিকা-ভিউ তারপর getViewTypeCount()এবং getItemViewType()একটি দৃশ্য টগল করানোর পরিবর্তে অ্যাডাপ্টারের মধ্যে View.GONEএবং View.VISIBLEখুব ব্যয়বহুল কাজের ভিতরে হতে পারে getView()যা তালিকা স্ক্রল প্রভাবিত করবে।
অ্যাডাপ্টারের getViewTypeCount()এবং ব্যবহারের জন্য দয়া করে এটি পরীক্ষা করুন getItemViewType()।
আউটটেট দেখুন !!!! গতকাল
বাস্তবায়ন করতে গিয়ে আমাকে সমস্যার মুখোমুখি হয়েছিল ListViewএবং সারিগুলির জন্য এটি দুটি ধরণের মতামতগুলি স্ক্রোল করার ঠিক পরে ঝাঁপিয়ে পড়ে। যদিও এই থ্রেডের মধ্যে শীর্ষে ভোট দেওয়া উত্তর একটি ভাল সাধারণ ব্যাখ্যা দেয় তবে এটি উল্লিখিত UI বাগটি বন্ধ করার জন্য তথ্যের সর্বাধিক গুরুত্বপূর্ণ বিষয়টিকে হাইলাইট করে না।
এখানে আমার ব্যাখ্যা হল:
উভয় getViewTypeCount()এবং getItemViewType()দ্বারা ব্যবহার করা হচ্ছে BaseAdapter'র getViewপদ্ধতি খুঁজে বের করতে একটি দৃশ্য কোন ধরনের এটি আনা হবে পুনর্ব্যবহৃত এবং ফিরে আসেন। (থ্রেডের মধ্যে শীর্ষের উত্তরে ব্যাখ্যা করা হয়েছে)। তবে যদি আপনি অ্যান্ড্রয়েড এপিআই ডক অনুসারে স্বতঃস্ফূর্তভাবে এই দুটি পদ্ধতি বাস্তবায়ন না করেন তবে আপনি যে সমস্যাটির কথা বলেছি তাতে আপনি সমস্যার মধ্যে পড়তে পারেন।
বাস্তবায়নের সংক্ষিপ্ত নির্দেশিকা:
একাধিক প্রকারের বাস্তবায়ন Viewsজন্য ListViewএর সারি আমরা মূলত বাস্তবায়ন করতে হবে, getItemViewType()এবং getViewTypeCount()পদ্ধতি। এবং getItemViewType()ডকুমেন্টেশন আমাদের নীচে একটি নোট দেয়:
নোট: পূর্ণসংখ্যার সীমার মধ্যে থাকতে হবে
0থেকেgetViewTypeCount() - 1।IGNORE_ITEM_VIEW_TYPEফিরে আসতে পারে।
সুতরাং আপনার মধ্যে getItemViewType()0 থেকে শুরু করে শেষ প্রকারের (প্রকারের সংখ্যা - 1) হিসাবে প্রকারের ধরণটির মানগুলি ফিরে আসা উচিত। উদাহরণস্বরূপ, আসুন বলি যে আপনার কাছে কেবল তিন ধরণের মতামত রয়েছে? সুতরাং দেখার জন্য ডেটা অবজেক্টের উপর নির্ভর করে, আপনি কেবল শূন্য-ভিত্তিক অ্যারে সূচকগুলির মতো পদ্ধতি থেকে 0 বা 1 বা 2 ফিরতে পারবেন getItemViewType()। এবং আপনার কাছে যেমন তিন ধরণের ভিউ ব্যবহৃত হয়েছে, আপনার getViewTypeCount()পদ্ধতিটি অবশ্যই 3 টি ফিরে আসবে।
যে কোনও ক্ষেত্রে আপনি যদি এই পদ্ধতির জন্য অন্য কোনও পূর্ণসংখ্যার মানগুলি 1, 2, 3 বা 111, 222, 333 হিসাবে ফেরৎ করেন তবে আপনি অবশ্যই উপরের ইউআই বাগটি অনুভব করতে পারেন যা আপনি কেবল অ্যান্ড্রয়েড এপিআই ডক না মানার দ্বারা রেখেছিলেন।
আপনি যদি ক্লু না পেয়ে থাকেন বা এখনও সমাধান করতে না পারেন এবং আরও তথ্যের প্রয়োজন হয় তবে দয়া করে এই স্ট্যাকওভারফ্লো প্রশ্নোত্তর থ্রেডের মধ্যে আমার বিস্তারিত উত্তরটি পড়ুন ।
আরও তথ্যের জন্য অ্যান্ড্রয়েড বিকাশকারী ডক পড়ুন আপনি সম্ভবত এটির ক্লু খুঁজে পেতে পারেন।
আশা করি এই উত্তরটি কারও পক্ষে প্রচুর ঘন্টা বাঁচাতে সহায়ক হতে পারে !!!
চিয়ার্স !!!
IGNORE_ITEM_VIEW_TYPEআমার আমার তালিকাভিউতে একটি বাগ আছে। আমি 1 টি চিত্র এবং 2 পাঠ্য দর্শন দিয়ে তৈরি একটি ভিউ sertোকাতে একটি অ্যারেএডাপ্টার ব্যবহার করেছি। আমার কাছে কেবল একটি ভিউ টাইপ ছিল। আমি চেষ্টা করেছি আইটেমভিউ টাইপ পদ্ধতিটি ওভাররাইড না করার জন্য, বা অবস্থান বা হার্ড-কোডেড পূর্ণসংখ্যা ফিরে দিয়ে ওভাররাইড করার চেষ্টা করেছি। সব ক্ষেত্রেই, আমি আমার তালিকায় সদৃশ হয়ে যাচ্ছিলাম যখন স্ক্রোল করার সময় অদ্ভুত আচরণের সাথে ছিল (সদৃশ পরিবর্তনগুলি)। IGNORE_ITEM_VIEW_TYPEপদ্ধতিতে ফিরে আসা সমস্যার সমাধান। ধন্যবাদ।