تخفیف ویژه

دوره مجازی اندروید (جلسه 11): آشنایی با Fragment ها در اندروید

دسته بندی: اندروید
زمان مطالعه: 1 دقیقه
۰۶ مرداد ۱۳۹۵

به نام خدا، دوستان سلام. توی این جلسه در مورد Fragment ها و کاربردشون صحبت می کنیم و برای با پیاده سازی Fragment ها آشنا بشویم از چند مثال ساده استفاده می کنیم. همچنین در مورد ایجاد دیالوگ و کاربرد زیاد آن صحبت خواهیم کرد و پیاده سازی آن را به شما دوستان گرامی آموزش خواهیم داد.

مطالب مطرح شده در این جلسه عبارتند از :

 

 

  • معرفی Fragment
  • کاربردهای آن
  • آشنایی با Lifecycle فرگمنت ها
  • اضافه کردن fragment از xml
  • اضافه کردن fragment با استفاده از جاوا و زمان اجرای اپ
  • جایگزین کردن fragment
  • آموزش حذف fragment
  • معرفی Alert dialog
  • ساختن Alert dialog در اندروید

معرفی سایت منبع انگلیسی برای مطالعه بیشتر

:: توجه

این مطلب یک جلسه از آموزش برنامه نویسی اندروید می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش برنامه نویسی اندروید

چه امتیازی به این مقاله می دید؟
نویسنده سعید شاهینی

جلسات دوره

نظرات کاربران

خلیل آزمون

ببخشید کسی پاسخگو نیست؟

خلیل آزمون

سلام مهندس من تو قسمت fragmnet تو تعریف name برای fragmemnt مشکل دارم یعنی اون اسم کلاس Samplefragment رو نمیاره چکار کنم؟

دانیال حجاری

سلام وقت بخیر
چطور میشه دکمه‌ای ساخت که با اون بین فرگمنت‌ها بشه سوییچ کرد؟ یعنی وقتی دکمه لمس شد و رفت روی یک فرگمنت دیگه، وقتی دقیقا همون دکمه رو مجددا لمس کردیم برگرده رو فرگمنتی که قبلا بوده؟

Mahdi Eshghi

سلام
میخواستم داخل فرگمنت 2 فرگمنت دیگر ایجاد کنم
داخل فرگمنت از یک فرگمنت دیگری استفاده کنم
اون لینک بالا که برای دوستمون رو دادین نگاه کردم ولی نفهمیدم کجا باید از ChildFragmentManager استفاده کنم؟
منبع اموزشی فارسی دارید معرفی کنید!

زهرا فاضلی

سلام.خسته نباشین.
من توی قسمت اول این آموزش مشکل پیدا کردم و همش خطای
lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pasargad.application_z/com.example.pasargad.application_z.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
برام میاد نمیدونم چطور درستش کنم؟

سعید شاهینی

دلیلش اینه که شما داخل فایل styles.xml تم اپلیکیشن رو عوض کردید که تم جدید با اکتیویتی هم خونی نداره

Desert

سلام خدا قوت . خیلی ممنونم بابت توضیحات خوب شما استاد عزیز در مورد مبحث فرگمنت . اما فکر می کنم که خیلی بهتر می شد توضحیحاتی تکمیلی در مورد این قسمت و شیوه ی بهینه استفاده از فرگمنت ها می دادید. بنده برایم چند سوال به وجود امده است.
اول این که شما برای ریپلیس ادد و پاک کردن هر بار یک نمونه از FragmentTransaction ایجاد کردید ایا نمی تونیم یک نمونه از FragmentTransaction را به صورت فیلد ایجاد کنیم و از ان در لیستنر هایمان برای کار های مختلف استفاده کنیم؟

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

سعید شاهینی

سلام٬ وقت بخیر٬ ممنون از لطف شما.
پاسخ سوال اول: مفهوم FragmentTransaction یعنی تراکنش. وقتی ما چندین تراکنش داریم٬ پس یعنی چندین نمونه جداگانه از تراکنش باید ایجاد کنیم. در صورتی که بخواهیم تراکنش ها رو داخل یک فیلد بریزیم٬ اتفاقی که میوفته اینه که ترکانش قبلی از بین می ره٬ چون آخرین تراکنش جایگزین اون در حافظه می شه.
پاسخ سوال دوم: محدودیتی در اندازه ی Stack وجود نداره٬ اپلیکیشن شما دیگه خیلی فرگمنت داشته باشه٬ ۱۰۰ فرگمنت در استک شاید داشته باشه٬ که این تعداد مشکلی ایجاد نمی کنه. برای ارسال اطلاعات از یک فرگمنت به فرگمنت دیگه باید ابتدا یک Bundle ایجاد کنید ٬ اطلاعات رو داخل بریزید و بعد با متد setArguments اون رو روی فرگمنت ست کنید.

امیر غلامی

جایی ک هم میشه از فرگمنت استفاده کرد هم از اکتیویتی , کدوم بهینه تر و سبک تر هست ؟

سعید شاهینی

سلام، اکتیویتی برای افراد مبتدی مناسب تر است، چون که فرگمنت ها نیاز به تجربه بیشتری دارند و کار کردن با اونها حساسیت های بیشتری می طلبه. مخصوصا مدیریت حافظه دستگاه کاربر خیلی مهمه. اگه تجربه کافی در زمینه کار با فرگمنت ها نداشته باشید و ندونید که چه کارهایی باعث بروز OutOfMemory می شوند خیلی راحت توی این دام گیر می کنید.

Hossein Fqx

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

سعید شاهینی

سلام دوست عزیز. اطلاعات باید داخل یک Bundle بریزید و اون باندل رو با متد fragment.setArgument به فرگمنت ایجاد شدتون ارسال کنید و سپس داخل فرگمنتتون می تونید دوباره داده ها رو با استفاده از fragment.getArgument دریافت کنید.

Hossein Fqx

ممنون این مشکل رو هم با روشی که شما گفتین هم با اینترفیس تونستم حل کنم . سوال بعدی که دارم میخواستم زمانی که فرگمنت ها پشت سر هم توی ران تایم اضافه میشن میخواستم توی استک برن که از هر فرگمنتی خارج شدم فرگمنت قبلی بیاد . اما زمانی که فرگمنت رو ریمو میکنم کل فرگمنت ها بسته میشه . میخواستم راهنمایی کنید چجوری هنگامی که یک فرگمنت رو میخوام ریپلیس کنم فرگمنت قبلی روی توی استک بزارم که با کلیک بک به آخرین فرگمنتی که توی استک هست بره.

از این کلاس هنگام ریپلیس استفاده کردم اما باز نتونستم به فرگمنت قبلی برگردم
.addToBackStack(new CategoryFragment().getClass().getName())

سعید شاهینی

سلام٬ نباید یه نمونه ی جدید از فرگمنت رو به متد addToBackStack پاس بدید. بلکه باید یه نمونه از فرگمنت رو داخل یک متغیر بریزید و اون متغیر رو به متد replace و addToBackStack پاس بدید. هنگامی که روی دکمه ی back کلیک شد باید متد fragmentManager.popFromBackstack رو صدا بزنید.

علی غلامی

;(() transaction.add(R.id.fragment_container,new SecurityManage

خسته نباشید استاد این قسمت بالا درست مثل شما مینیویسم اما زیرش خط قرمزمیکشه با راهنمای کنید با تشکر

سعید شاهینی

موس رو روی خط قرمز نگه دارید تا بهتون بگه مشکل چیه

امیرمهدی

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

سعید شاهینی

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

مرتضی مرادی

سلام ببخشید من میخواست داخل فرگمنت از فرگمنت استفاده کنم در واقع داخل یه فرگمنت میخوام تب لایوت بزارم آیا همچین کاری میشه انجام داد ؟؟؟

سعید شاهینی

سلام، بله باید از ChildFragmentManager استفاده کنید.
لینک آموزش و توضیحات (انگلیسی)

پایان زمان پشتیبانی

دانشجوی گرامی، بازه پشتیبانی فعال برای این دوره ۳ ماه است که برای شما به پایان رسیده است.

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

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.