লিস্টভিউ ইতিমধ্যে সমস্ত আইটেম প্রদর্শনের জন্য যথেষ্ট লম্বা হওয়ার জন্য নিজেকে পরিমাপ করতে সক্ষম, তবে আপনি কেবল মোড়ানো_কন্টেন্ট (মেজারস্পেক.উনস্পেসফাইড) নির্দিষ্ট করলে এটি এটি করে না। এটি মেজারস্পেক.এT_MOST এর সাথে উচ্চতা দেওয়া হলে এটি করবে। এই জ্ঞানের সাহায্যে আপনি এই সমস্যাটি সমাধানের জন্য খুব সহজ একটি সাবক্লাস তৈরি করতে পারেন যা উপরের পোস্ট হওয়া সমাধানগুলির তুলনায় অনেক ভাল কাজ করে। আপনার এখনও এই সাবক্লাসের সাথে মোড়ানো_ কনটেন্ট ব্যবহার করা উচিত।
public class ListViewForEmbeddingInScrollView extends ListView {
public ListViewForEmbeddingInScrollView(Context context) {
super(context);
}
public ListViewForEmbeddingInScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ListViewForEmbeddingInScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 4, MeasureSpec.AT_MOST));
}
}
উচ্চতা মাপের স্পেসকে খুব বড় আকারের (পূর্ণসংখ্যক। MAX_VALUE >> 4) দিয়ে AT_MOST হতে চালিত করার কারণে তালিকা ভিউ তার সমস্ত শিশুকে প্রদত্ত (খুব বড়) উচ্চতা পর্যন্ত পরিমাপ করে এবং সেই অনুযায়ী তার উচ্চতা নির্ধারণ করে।
এটি কয়েকটি কারণে অন্যান্য সমাধানগুলির চেয়ে আরও ভাল কাজ করে:
- এটি সবকিছু সঠিকভাবে পরিমাপ করে (প্যাডিং, বিভাজক)
- এটি পরিমাপ পাসের সময় তালিকাগুলির পরিমাপ করে
- # 2 এর কারণে এটি কোনও অতিরিক্ত কোড ছাড়াই প্রস্থ বা আইটেমের সংখ্যায় সঠিকভাবে পরিবর্তন পরিচালনা করে
নেতিবাচক দিক থেকে, আপনি তর্ক করতে পারেন যে এটি করা এসডিকে অনাবন্ধিত আচরণের উপর নির্ভর করছে যা পরিবর্তিত হতে পারে। অন্যদিকে, আপনি তর্ক করতে পারেন যে এভাবেই র্যাপ_ কনটেন্টকে তালিকাভিউয়ের সাথে সত্যই কাজ করা উচিত এবং বর্তমান র্যাপ_কন্টেন্ট আচরণটি কেবল ভেঙে গেছে।
যদি আপনি চিন্তিত হন যে আচরণটি ভবিষ্যতে পরিবর্তিত হতে পারে তবে আপনার অনিয়ম ফাংশন এবং সম্পর্কিত ফাংশনগুলি কেবল তালিকাভিউ.জভা থেকে এবং আপনার নিজের সাবক্লাসে অনুলিপি করা উচিত, তবে অনমেষের মাধ্যমে এএনএমএসটি পাথটিও UNSPECIFIED এর জন্য তৈরি করুন।
যাইহোক, আমি বিশ্বাস করি যে আপনি সংখ্যার তালিকা আইটেমের সাথে কাজ করার সময় এটি একটি সঠিক বৈধ পন্থা। লিনিয়ারলআউটের তুলনায় এটি অকার্যকর হতে পারে তবে আইটেমের সংখ্যা যখন কম থাকে তখন লিনিয়ারলআউট ব্যবহার করা অপ্রয়োজনীয় অপ্টিমাইজেশন এবং অতএব অপ্রয়োজনীয় জটিলতা।