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

گرفتن نام فرگمنت فعلی !

Hamedmtn  10 سال پیش  10 سال پیش
0 0

دروود

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

داخل استک اور زیاد سرچ کردم اما نفهمیدم که کد هارو کجا باید استفاده کنم چون هیچ توضیحی نداده بودند!

سپاس از دوستان

+1 0
زمانی که یک فرگمنت باز باشه یعنی شما اونو میبینید و هر فرگمنت میتونه Title داشته باشه که داخل یک آرایه قرار میگیره و با دسترسی به شماره خونه فرگمت میتونید متوجه بشید کدام فرگمنت باز هست . اگر منظورتون از فرگمنت شی فرگمنت هست میتونید دقیق مثل آموزش استاد در رابطه با G.currentActivity عمل کنید . (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Hajhosseini  10 سال پیش
+4 0

زمانی که شما فرگمنت رو میسازید، باید براش یک تگ در نظر بگیرید مانند:

 getSupportFragmentManager().beginTransaction()
                        .replace(R.id.container, new MainFragment(), "MAIN_FRAGMENT")
                        .commit();

زمانی که میخواید فرگمنت هارو چک کنید میتونید تگ رو بررسی کنید. 2 راه هست، یکی کد زیر:

 MainFragment mainFragment = (MainFragment)  manager.findFragmentByTag("MAIN_FRAGMENT");

برای چک کردن شرط به این گونه عمل کنید چون فقط null نبودن و یا فقط Visible بودن کافی نیست

 if (fragment != null && fragment.getTag() != null && !fragment.isHidden() && fragmet.isVisible())

در صورتی که فرگمنت های شما زیاد هستن و میخواید یک FragmentHandler براش بسازید، باید لیست فرگمنت هایی که Attach شدن رو بگیرید و در یک 

 List<Fragment>

قرار بدید. اینو کد قرار نمیدم تا خودتون تلاش کنید، در صورتی که نتونستید بهم پیام بدید.
در مورد G.currentActivity باید بگم کلا تعریف متغیر های استاتیک و استفاده از اونها در این موارد اشتباه هست. سطح آموزش های استاد از 0 شروع میشد و خیلی خوب بود که اینگونه آموزش دادن، ولی توی سطوح بالاتر استفاده از متغیر های استاتیک فقط و فقط در مواقع ضروری پیشنهاد میشه. در مورد فرگمنت ها نمیتونید از G.currentFragment استفاده کنید به 2 دلیل:

دلیل اول این که شما ممکنه چند فرگمنت همزمان باز داشته باشید، حتی ممکنه چند فرگمنت توی یک فرگمنت باز کرده باشید.
دلیل دوم این که متدهای onDetach و ... در این موارد به درستی کار نمیکنن و توی گوشی های مختلف نمیتونید بفهمید چه موقعی فرگمنت مورد نظر رو بستید.(راه حل داره ولی مانند اکتیویتی نیست که با 1 خط کد بشه حلش کرد)
موفق باشید


آپدیت:
تجربه ثابت کرده همیشه فرگمنتی که داره نشون میده، آخرین فرگمنت از لیست فرگمنت ها نیست، پس شما وقتی یک لیست از فرگمنت های Attach شده میگیری، از آخری شروع کن ببین کدوم null نیست بعد بقیه شرط هارو چک کن. (این مشکل توی لایه های پیچیده بوجود میاد)

+1 0
حق با آقای حاج حسینی هست ، مثلا اگر از ViewPager استفاده کنید روش G.currentFragment جواب نمیده . ولی برای زمانی که یک فرگمنت همزمان نشان داده میشه مشکلی نداره ولی روش تگ زدن هم خوبه . (10 سال پیش)
پاسخ به سوال 
Hajhosseini  10 سال پیش
+1 0

اگر از ویو پیجر استفاده میکنید که کلا داستان فرق داره، چون توی آداپتر نمیشه تگ ست کرد.
ولی بازم یک راهی هست. اگر آداپترتون از PagerAdapter اکستندز شده باشه، میتونید نام فرگمنت جاری رو بگیرید با استفاده از 1 کاراکتر آخر نامش (اگر تعداد فرگمنت ها بیشتر از 9 باشه باید 2 رقم آخر رو بگیرید) یک instance از فرگمنت بسازید.
توجه کنید که حتما باید از PagerAdapter استفاده کنید چون FragmentStatePagerAdapter همون آیدی رو هم برنمیگردونه.
یک راه دیگه هم وجود داره که شما میتونید از indicator مقدار position رو بخونید و در فرگمنتتون به اکتیویتی دستور بدید که position رو برگردونه و بگید اگر position مثلا 1 بود، متد 1 انجام بشه و ...
توی این روش دیگه فرقی نداره آداپتر رو از چی اکستندز میکنید. به جای استفاده از indicator هم میتونید یک Custom ViewPager بسازید که position و بقیه مقادیری که میخواید رو برگردونه.


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