سلام استاد میخواستم بدونم این AtaachToRoot یعنی چی در فرگمنت ها چون من حتی true کردم تغییری حس نکردم .
متوجه نمیشم اینکه به روت بچسبد یا خیر.
اگر روت منظور لیوت ما هست true کردم تغییری ندیدم.
اگر attachToRoot در LayoutInflater مقدار true یاfalse داشته باشه چه معنی داره؟
اگر attachToRoot مقدار true یا false بگیره تفاوت اصلی بین سومین ورودی اینه که
وقتی attachToRoot رو true بزاری در واقع میگید حالا child (اولین ورودی) به سومین ورودی اضافه کن
وقتی attachToRoot رو false بزاری در واقع میگید حالا child (اولین ورودی) به سومین ورودی اضافه نکن
اما بعدا هم می تونید ان را اضافه کنید
بعدا کی می تونیم اضافه کنم ؟
به عنوان مثال وقتی ()parent.addView استفاده میکنید و childView رو اضافه میکنید یک تصور غلطی که معمولا وجود داره اینه که فکر میکنیم اگر attachToRoot مقدار false بگیره childView دیگه به view والد اضافه نمیشه اخطار: در هر دو مورد childView به والد متصل میشه اما زمانشون متفاوته درحقیقت
inflater.inflate(child,parent,false);
parent.addView(child);
برابر هست با
inflater.inflate(child,parent,true);
اگر وظیفه شما اضافه کردن childView نیست نباید هرگز attachToRoot رو true بزارید
مثالی از اضافه کردن یک قطعه(fragment)
public View onCreateView(LayoutInflater inflater,ViewGroup parent,Bundle bundle){
super.onCreateView(inflater,parent,bundle);
View v = inflater.inflate(R.layout.image_fragment,parent,false);
.....
return v;
}
اگر سومین ورودی (attachToRoot)رو true وارد کنید در واقع شما از کد زیر یه IllegalStateException خواهید گرفت
getSupportFragmentManager()
.beginTransaction()
.add(parent, childFragment)
.commit();
اگر شما قبلا به اشتباه در onCreateView فرزند رو به parent متصل کردید با فراخوانی add به شما خواهد گفت که این view قبلا اضافه شده است از این رو یه IllegalStateException به وجود میاد بنابراین اینجا وظیفه شما نیست که childView رو به والد اضافه کنید کار کاره(انگلیسی ها نیست!) FragmentManager باید باشه نه ما پس سعی کنیم همیشه false بزاریم
پ ن : منم انگلیسیم خوب نیست ولی میشه از مترجم ها کمک گرفت مث همین متن بالا هر چند بعضی جاها مکنه اشتباه برداشت کنیم
پ ن : اگه کسی می خونه و دلیل دیگه ای میدونه بگه و یا اگه به دلیل دیگه ای برخورد کردید دلیل جدیدتون رو هم بگید :-)