💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ پوریا شفیعی
AttachToRoot
جامعه جاوا (اندروید) ایجاد شده در ۱۲ بهمن ۱۳۹۸

سلام استاد میخواستم بدونم این 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 بزاریم

پ ن : منم انگلیسیم خوب نیست ولی میشه از مترجم ها  کمک گرفت مث همین متن بالا هر چند بعضی جاها مکنه اشتباه برداشت کنیم  

پ ن : اگه کسی می‌خونه و دلیل دیگه ای میدونه بگه و یا اگه به دلیل دیگه ای برخورد کردید دلیل جدیدتون رو هم بگید :-)

مهرداد ۱۳ بهمن ۱۳۹۸، ۰۵:۳۴