اگر محتوایی که توی اسکرول ویو قرار میگیره اندازه اسکرین باشه، برای اینکه خوب نشون داده بشه باید اتریبیوت زیر رو تعریف کنیم:
android:fillViewport="true"
اگر محتوا بزرگتر از صفحه بود مهم نیست این اتریبیوت باشه یا نه.
اینجا با مثال قشنگ توضیح داده.
برای لود کردن عکس دو تا متد وجود داره:
1.
imageID.setImageResource(int id);
2.
imageID.setImageDrawable(context.getResources().getDrawable(int id))
این برای کلاس هایی غیر اکتیویتی استفاده میشه.
ID همون ...R.drawable هست.
از لیوت منیجر برای نحوه نمایش ریسایکلر ویو استفاده میکنیم. کلا سه نوع هست:
1. LinearLayoutManager
پارامتر دوم میگه نحوه نمایش عمودی هست و پارامتر سوم میگه لازم نیست لیست برعکس شه.
توی ریسایکلر ویو متد onCreateViewHolder (همون متد اول) که کار inflate رو انجام میده، تعداد فراخونیش محدود هست. متدی که به ازای هر آیتم کال میشه، متد onBindViewHolder هست. این یکی از ویژگی های مثبت ریسایکلر ویو به شمار میاد، چون فرآیند inflate کردن پر هزینه هست.
دریافت پوزیشن کلیک شده در ریسایکلر ویو: (خیلی به درد بخوره)
برای این کار دو تا متد هست که هر دو توی کلاس ViewHolder هستن:
1. دپریکیت شده.
getAdapterPosition()
2.
getLayoutPosition()
این دو تا متد خروجی int دارن و شماره آیتم فعلی کلیک شده در ریسایکلر ویو رو میدن.
ریسایکلر ویو خودش لیسنر نداره و بنابراین خودمون باس بنویسیم واسش!
یکی از فرق های ریسایکلر ویو با لیست ویو همینه که لیست ویو متدهای از پیش نوشته شده داره (مثل آیتم لیسنر) ولی ریسایکلر ویو نداره. اما ریسایکلر ویو انعطاف پذیری بیشتری داره و امکان کاستومایز شدنش خیلی زیاده.
کارد ویو خودش dependency داره ولی توی کتابخونه متریال دیزاین هم تعریف شده. من ترجیحم اینه که از نسخه متریال دیزاینش استفاده کنم.
ریسایکلر ویو هم dependency داره. فقط باید نسخه ش با متریال دیزاین یکی باشه تا توی preview نشون داده بشه! این مشکلی بود که الآن اینجوری حل شد!
implementation 'com.google.android.material:material:1.2.0-alpha02'
implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha05'