AttachToRoot

پرسیده شده
فعالیت 1566 روز پیش
دیده شده 768 بار
2

سلام استاد میخواستم بدونم این AtaachToRoot یعنی چی در فرگمنت ها چون من حتی true کردم تغییری حس نکردم .

متوجه نمیشم اینکه به روت بچسبد یا خیر.

اگر روت منظور لیوت ما هست true کردم تغییری ندیدم.

 

فایل پیوست

پوریا شفیعی
پوریا شفیعی

12 بهمن 98

2
حذف شده

سلام

چه سوال جالبی   مستنداتش رو خوندم  یه خورده سر در گم شدم ولی این لینک کمک کرد فک کنم جواب شما هم باشه

این لینک هم دیدم جالب بود فرستادم انشالله واسه شما هم مفید باشه ، روزنامه وار خوندم ولی بعد حتما دوباره لینک دوم رو هم عمیق تر می خونم 

فایل پیوست

سید شهریار انباز

توسط

سید شهریار انباز

12 بهمن 98

حذف شده
متاسفانه انگلیسی خوبی ندارم دوست خوب من:)
پوریا شفیعی

12 بهمن 98

2
حذف شده

اگر 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 بزاریم

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

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

فایل پیوست

مهرداد

توسط

مهرداد

13 بهمن 98

حذف شده
* در جلسه ساخت آداپتر و ViewHolder به attchToRoot هم اشاره شده
مهرداد

15 بهمن 98

حذف شده
سلام به دوستان. من که در حد شما وارد نیستم ولی یادمه توی جلسه سوم ریسایکلرویو (ساخت آداپتر و ViewHolder) استاد این دلیل رو میارن . میگن که اگه true باشه آیتم ها زمانی که از ریسایکلر ویو استفاده میشه دیگه قابل اسکرول نیستن و layout manager نمیتونه جای اونا رو عوض کنه. به این خاطر false میذاریم. احتمالا شاید به خاطر اینه که اگه از ریسایکلر ویو توی فرگمنت استفاده کردیم به مشکل برنخوریم false میذاریم. البته این استنباط من بود تا این جایی که خوندم.
احمد اسماعیلی

1 خرداد 99

حذف شده
البته نمیدونم چیزایی که نوشتم به فرگمنت هم ربط داره یا نه.
احمد اسماعیلی

1 خرداد 99

حذف شده
سلام احمد، دو آدرس اولی که فرستادم رو نگاه کنی ذره ذره متوجه میشیم چی به چیه
مهرداد

5 تیر 99