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



visibility  
mode_comment   ۴۱

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

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

 

 

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

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

info توجه

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

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

comment دیدگاه کاربران
Mr abbas replyپاسخ

توروخدا یکم اهسته تر داریم تمرین میکنیم 😥
تازه ترم تابستون برداشتیم دوتا دوتا کلاسا پشت سر هم 10 واحد 😀

سعید شاهینی

دیگه هفته ای 2 ساعت آموزش خوبه که 🙂

جعفر پیشدادی

سلام …باز ما اصرار داریم زودتر درس بدن به مهر نکشه ترممون شروع میشه…الان تابستونه میتونیم بیشتر کار کنیم..بعدشم ویدئو در دسترسه میتونید هروقت دوست داشتید تمرین بکنید

سعید شاهینی

سلام، ما همون هفته ی 2 ساعت آموزش رو خواهیم گذاشت و تا آخر تابستان تقریباً دوره کامل خواهد شد.

milad boos replyپاسخ

سلام
چرا من با موبایل دانلود میزنم لینک دانلود نمی یاد و منو به صفحه اصلی سایت میفرسته؟؟
من به کامپیوتر دسترسی ندارم

وحید صالحی

به دلیل موارد امنیتی با موبایل و تبلت امکان دانلود وجود نداره

milad boos

خوب الان بنده پکیج رو خریدم حالا باید چکار کنم؟
لطفا یک راه حلی پیدا کنید
چون بنده همش خارج شهر هستم و به سیستم دسترسی ندارم
تشکر

وحید صالحی

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

milad boos replyپاسخ

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

Nima Arian replyپاسخ

سایتی که معرفی کردین باز نمیشه ! لطفا لینکش رو مجددا بررسی کنید

سعید شاهینی

باید به vpn متصل باشید، چون تحریم هستیم باز نمی شه

Javad Abbasi replyپاسخ

ممنون از شما.
لطفا اسم ها رو طوری انتخاب کنید که بدونید واسه کدوم قسمته! همه شبیه به همه . ما که تازه کاریم قاطی میکنیم . بدونیم الان دارید از کدوم استفاده میکنید .
بیشتر منظورم روی اسامی آی دی ها ، اسم ویو ها ، کلاس ها و …

سعید شاهینی

سلام، باشه حتما ممنون

مرتضی replyپاسخ

استاد شما name رو توی xml اضافه کردین توی کلاس activity_main ، ولی اصلا همچین چیزی وجود نداره برای من باید خودم دستور andorid:name رو وارد کنم. و ادرسش دستی وارد کنم. که بازl فرگمنت رو نشون نمیده بهم

سعید شاهینی

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

Mehran Z replyپاسخ

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

وحید صالحی

سلام الان هم می تونید با دانلود منیجر دانلود کنید چیزی تغییر نکرده احتمالا تنظیمات دانلود منیجر رو برای browser ست نکرید رو لین دانلود کلیک راست کنید ببنید download with IDM رو براتون نمایش میده اگر داده روش کلیک کنید یا اگر نبود save as رو کلیک کنید ببینید با دانلود منیجر شروع به دانلود میکنه اگر بز هم نشد لینک دانلود رو در دانلود منیجر کپی کنید و شروع کنید به دانلود

Mehran Z

اون لحظه هربار امتحان میکردم لینک دانلود ویدیو تبدیل میشد به لینک خود صفحه چند دقیقه بعد درست شد
ببخشید وقتتون رو گرفتم

امیر غلامی replyپاسخ

سلام
چطور میشه فونت دیالوگ رو کلا عوض کرد؟ من این رو مینویسم ارور میده (قسمت پیامش مشکل نداره تایتل ارور میده)

سعید شاهینی

سلام دوست عزیز، برای اینکار می توانید dialog سفارشی بسازید و فونت روی آیتم های مختلف ست کنید.

سیروان replyپاسخ

استاد مشکل حل شد نیازی به پاسخ گوی نیست
مشکل از طول بود که wrap_content زدم درست شد.

امیر غلامی replyپاسخ

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

سعید شاهینی

سلام، فایل style.xml رو برام بفرستید مشکل از اونه تا درستش کنم، با ایمیل

مرتضی مرادی replyپاسخ

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

سعید شاهینی

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

امیرمهدی replyپاسخ

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

سعید شاهینی

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

علی غلامی replyپاسخ

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

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

سعید شاهینی

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

Hossein Fqx replyپاسخ

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

سعید شاهینی

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

Hossein Fqx

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

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

سعید شاهینی

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

امیر غلامی replyپاسخ

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

سعید شاهینی

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

Desert replyپاسخ

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

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

سعید شاهینی

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

زهرا فاضلی replyپاسخ

سلام.خسته نباشین.
من توی قسمت اول این آموزش مشکل پیدا کردم و همش خطای
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 تم اپلیکیشن رو عوض کردید که تم جدید با اکتیویتی هم خونی نداره

Mahdi Eshghi replyپاسخ

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

دانیال حجاری replyپاسخ

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

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.