آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

attachroot در پارامتر سوم inflate چیست؟ (آموزشی) در قالب یک آداپتور

محمد  2 سال پیش  2 سال پیش
0 0

بسم الله الرحمن الرحیم

برای درک این قسمت لازمه که یک مقدار فکرتون رو منسجم کنید و سعی کنید مثالی که میزنم رو تجسم کنید البته امیدوارم از پسش بر بیام

و همچنین لازمه که یک اشنایی مختصری خودتون داشته باشید

موقعی که به این قسمت آموزش ها رسیدم متوجه نشدم که این پارامتر سوم کارش دقیقا چیه 

تحقیقی کردم و یک سری اطلاعاتی کسب کردم تصمیم گرفتم اطلاعاتم رو با شما به اشتراک بگذارم 

اگر اشتباه بود تصحیح بفرمایید و اگر صحیح بود صلواتی بفرستید 

اللهم صل علی محمد وال محمد وعجل فرجهم 

 

به طور کلی ما وقتی از 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 باشه یعنی بعدا و هرزمانی که 

این لایه ی طراحی شده در یک ویوی والدی قرار گرفت در این صورت این ویژگی ها بر روی والدش تنظیم بشه

امید وارم خوب توضیح داده باشم

 

0 0
این لینک و این لینک هم میتونه مفید باشه (2 سال پیش)
 برای این سوال پاسخی وجود ندارد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .