PDA

View Full Version : در چه شرایطی ضروری است و می بایست از فرگمنت استفاده کنیم؟



mehrdad85
شنبه 04 خرداد 1398, 16:25 عصر
سلام
دوستان من یه سوال داشتم گرچه خیلی ساده است و مطلب در مورد اون توی اینترنت بسیار بسیار زیاد هستش اما این مطلب برای من توی یه چیز ابهام داره. کتاب ها و منابع مختلف همه از شرایطی که می تونیم از فرگمنت استفاده کنیم حرف زدن اما سوال من اینه که توی اون شرایط میتونیم هم از اکتیویتی های متعدد استفاده کنیم. اگه قرار باشه که از یه فرگمنت در کل پروژه فقط و فقط یکبار و در یکجا استفاده بشه استفاده از اون نسبت به استفاده از اکتیویتی چه مزیتی بهمراه داره؟
مثلا شما فرض کنین که در یه اکتیویتی سه تا دکمه داریم که با کلیک کردن روی اون باید لیست کل آهنگ ها نمایش داده بشه با کلیک بر روی دکمه دیگه باید لیست خواننده ها نمایش داده بشه و دکمه دیگه آلبوم ها را برمیگردونه
حالا تو این شرایط به نظرم دو تا راهکار داریم شما بفرمایید که کدام درست تر و اصولی تر است
اول اینکه سه تا اکتیویتی درست کنیم یکی برای خواننده ها یکی برای اهنگ ها و یکی هم برای البوم ها. حالا با کلیک بر روی هر کدام از دکمه های مد نظر به اکتیویتی خودش هدایت میشه.

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



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

mehrdad85
یک شنبه 05 خرداد 1398, 16:17 عصر
سلام

واقعا کسی نظر خاصی نداره؟یعنی دوستان از اکتیویتی فقط استفاده میکنن؟ یا سلیقه هم فرگمنت استفاده میکنن؟
من میخوام فقط توجیه و دلیل استفاده شما بزرگواران را بدونم تا با تجربه شما بتونم در مورد مورد خودم تصمیم گیری کنم همین.

Nevercom
دوشنبه 06 خرداد 1398, 01:41 صبح
فلسفه‌ی اصلی ایجاد فرگمنت این بوده که به ماژولار کردن پروژه کمک کنه.
در سوال شما فرض بر این گذاشته شده که فرگمنت تنها یک جا استفاده بشه، یعنی که به موضوع ماژولاریتی آگاهی دارید و دنبال دلیلی هستید که فراتر از این موضوع، از فرگمنت استفاده کنید.

جدای این بحث ماژولاریتی، قابلیتی که فرگمنت به ما میده، این هست که با دردسر کمتری، UI همگن (Uniform) تری بسازیم و البته برای انیمیشن ها دستمون بازتر هست، البته مشکلی که همیشه به وجود می‌اورد این بود که خود Lifecycle فرگمنت دردسر مضاعفی بود و یکی از منابع باگ در پروژه. خود من شخصن بارها شده که در جایی که با فرگمنت ارتباطی وجود داشته، چندین جا تو اکتیویتی و خود فرگمنت باید چک می‌کردم که آیا این فرگمنت هنوز وجود داره و به اکتیویتی متصل هست یا خیر. که خب این مشکلات در اکتیویتی خیلی کمتر وجود داره.

اما الان که کتابخانه‌ی Jetpack Navigation وجود داره و با تلاش‌هایی که در مجموعه کتابخانه‌های Jetpack برای Lifecycle Aware کردن کامپوننت‌ها انجام شده، این مشکلات خیلی کمتر شده. توصیه‌ی فعلی گوگل این هست که بصورت پیشفرض از تنها یک Activity بعنوان Entry Point استفاده بشه و سایر بخش‌های UI با استفاده از فرگمنت و Navigation ایحاد بشه.
کتابخانه Navigation بهتون اجازه میده که با ایجاد Navigation Graph (مشابه چیزی که در iOS تحت عنوان Storyboard داریم)، درک بهتری از بخش‌های مختلف UI داشته باشیم. پیچیدگی ها رو خود کتابخانه مدیریت می‌کنه و در استفاده از انیمیشن تغییر فرگمنت‌ها بهمون کمک می‌کنه و البته مهم‌تر از همه، به کمک Safe Args این امکان رو بهمون میده که در ارسال پارامتر به فرگمنت‌ها Type Safety رو داشته باشیم. یکی از جاهایی که تو اکتیویتی می‌تونست منبع باگ باشه، همین ارسال پارامترها در Intent و Type Mismatch هست که ظاهرن تو این بخش هم بهمون کمک می‌کنه.

در نهایت، توصیه این هست که از فرگمنت توسط کتابخانه Navigation استفاده بشه، مگر جاهایی از اپ و زمانی که شرایط استفاده از اکتیویتی‌های متعدد رو اجبار کنه.