attachroot در پارامتر سوم inflate چیست؟ (آموزشی) در قالب یک آداپتور
بسم الله الرحمن الرحیم
برای درک این قسمت لازمه که یک مقدار فکرتون رو منسجم کنید و سعی کنید مثالی که میزنم رو تجسم کنید البته امیدوارم از پسش بر بیام
و همچنین لازمه که یک اشنایی مختصری خودتون داشته باشید
موقعی که به این قسمت آموزش ها رسیدم متوجه نشدم که این پارامتر سوم کارش دقیقا چیه
تحقیقی کردم و یک سری اطلاعاتی کسب کردم تصمیم گرفتم اطلاعاتم رو با شما به اشتراک بگذارم
اگر اشتباه بود تصحیح بفرمایید و اگر صحیح بود صلواتی بفرستید
اللهم صل علی محمد وال محمد وعجل فرجهم
به طور کلی ما وقتی از inflate استفاده می کنیم که بخوایم یک سری ویژگی هایی که ساختیم رو به یک ویو بدیم
(ویو مثل recyclerview و ...)
مثلا ما در layout هامون یک آیتمی طراحی کردیم با یک سری ویژگی هایی مثل
cornerradius , color
و یک آدابتر داریم که از recyclerview ای extends شده که مثلا برای نمایش دسته بندی غذاها ساختیم
برای اینکار لازمه تا ما یک holder ینی نگه دارنده داشته باشیم که توصیف کنیم قراره این ادابتر ما
چطور نگه داری کنه اطلاعات رو ، چطوری نمایش بده ، و از چه اطلاعاتی ساخته بشه
این نمونه ادابتر هست
public class CategoryHomeFoodAdapter extends RecyclerView.Adapter<CategoryHomeFoodAdapter.MyViewHolder> {
Context context; // همه ی کلاس های ما از یک کانتکس ارث بری میکنن که
// به وسیله این کانتکس میشه به بخش های مختلف دسترسی پیدا کرد توضیحات این بخش مفصل تر هست
// از این دو خطی که نوشتم !!!
List<FoodModel> data; // FoodModel کلاسی هست که در اون اطلاعات غذایی ما توصیف شده شامل اسم غذا وهراطلاعات دیگه ای که فرض کنید
public CategoryHomeFoodAdapter(Context context, List<FoodModel> data) {
this.context = context;
this.data = data;
// در این کانستراکتور دو پارامتر بالا مقدار دهی اولیه میشن
}
@NonNull
@NotNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
// این متد مربوط به ساخت نگه دارنده هست یا همون
//viewholder
// که در این قسمت کار
// inflate
// رو باید انجام بدیم زیرا موقع ساختن اطلاعاتمون قرار هست ویژگی هایی که طراحی کردیم رو به نگه دارنده بدیم
// تا طبق ویژگی های ما اطلاعات مارو نگه داری کنه مثلا
// color , cornerradius
View view = LayoutInflater.from(context).inflate(R.layout.item_category_home_food_activity , parent ,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull @NotNull CategoryHomeFoodAdapter.MyViewHolder holder, int position) {
holder.name_textview.setText(data.get(position).getName());
// اطلاعات مارو در هولدر یا همون نگه دارنده قرار میده
}
@Override
public int getItemCount() {
// اینجا بیان کردیم که تعداد ایتم هامون چه مقداره
return data.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView name_textview;
// خیلی مهمه که تکست ویو دقیقا همینجا ساخته بشه در غیر این صورت در قسمت متد
// onBindView
// نمایش داده نمیشه
public MyViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
// اینجا بیان میکنیم که این اطلاعات در کجای اپلیکیشن قراره قرار بگیره
name_textview = itemView.findViewById(R.id.txt_categoryView_homeFoodActivity);
}
}
}
حالا سعی کنید مثال بالا رو که یک ادابتر هست درک کنید
در قسمت onCreateViewHolder
ما این قطعه کد رو داشتیم که اصل بحث هم همینجاست
View view = LayoutInflater.from(context).inflate(R.layout.item_category_home_food_activity , parent ,false);
در اینجا ما باید یک ویو بسازیم چون ایتمی که طراحی کردیم از جنس ویو هست ویو رو هرچیزی که به طریقی قابل نمایش باشه درنظر بگیرید مثل
recyclerview
اینفلیتر کارش اینه که این ویژگی هایی که ساختیم رو به یک چیزی مثل تکست ویو یا هرچیزی دیگه ای که نسبت داده بشه ، قرار میده و روی اون ایتم تنظیم میکنه
پارامتر اول لایه ای که طراحی کردیم رو بهش میدیم همونطور که میبینید از جنس لایه هست
R.LAYOUT
پارامتر دوم تعیین میکنه که این لایه ای که معرفی کردیم به چی تنظیم بشه؟ میگیم به والدش تنظیم بشه
پارامتر سوم میگیم ایا الان؟ یا بعدا
اگر ما دستی اطلاعات رو داده باشیم در این صورت مقدارش رو true باید بگذاریم
ولی وقتی اطلاعات ما مشخص نیست چقدر هست و از فضای دیگری وارد میشن باید مقدارش false باشه یعنی بعدا و هرزمانی که
این لایه ی طراحی شده در یک ویوی والدی قرار گرفت در این صورت این ویژگی ها بر روی والدش تنظیم بشه
امید وارم خوب توضیح داده باشم
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .