افزودن آیتم ACTION BAR از داخل فرگمنت ها در برنامه نویسی اندروید

افزودن آیتم ACTION BAR از داخل فرگمنت ها در برنامه نویسی اندرویدReviewed by آریانا on Nov 5Rating: 5.0افزودن آیتم ACTION BAR از داخل فرگمنت ها در برنامه نویسی اندرویدآموزش نحوه افزودن آیتم ACTION BAR از داخل فرگمنت ها در برنامه نویسی اندروید.

در این پست به شما یاد می دهیم که ایتم اکشن رو از داخل ACTION BAR به فرگمنت ها اضافه کنید.
همچنین  یاد خواهید گرفت که چگونه اکشن رو بنا به حالت فرگمنت فعال یا غیرفعال کنید. تمام کدها با  stock Android ActionBar object و ActionBarSherlock کار می کنند.

برای چه میخواهیم ایتم اکشن رو اضافه کنیم؟

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

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

ویرایش آیتم لیست در اندروید
دراین عکس صفحه نمایش تبلت نشان داده شده است:

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

LIST FRAGMENT

دراین صفحه ایکون های EDIT و TRASHفقط برای موارد انتخاب شده کار می کنند مثلا وقتی متنی را انتخاب می کنید.همچنین ایکون های PLUS و SEARCH نیز مربوط به قسمت LIST FRAGMENT هستند.

افزودن ایتم اکشن با استفاده ازبرنامه

همانطورکه عنوان پاراگراف نشان می دهد action item های اضافه شده با استفاده از فرگمنت وارد برنامه می شوند. در واقع تفاوت انچنانی با اضافه کردن برنامه ها از طریق activity ندارد. از متد on Create Options Menu باید استفاده کنید.

 

همانطور که میبینید امضای اینجا با کلاس activityمتفاوت است. وقتی از فرگمنت استفاده میکنید متد شما MenuInflaterرا به عنوان پارامتر ثانوی درنظر میگیرد. و متد onCreateOptionsMenu فرگمنت اندازه ی boolean را به مانمی دهد.
حتی با وجود استفاده این متد دراینجا اندروید چیزی به ایتم های منو اضافه نمیکنه مگراینکه اسمش را بصورت واضح مشخص کنید و تعیین کنید که این یک متد است.برای انجام این کار setHasOptionsMenu(را از قسمت متد onCreate()فرگمنت فرامی خوانید.

الان ایتم های منوی فرگمنت در قسمت action bar نشان داده می شوند.
البته برای انجام این کار دیگر نمیتوانید ازهمین ورودی ها در قسمت activityاستفاده کنید.درغیراین صورت تنها درصفحه هایی که از ارایش multiplane استفاده می کنید خوب نمایش داده میشود اما در صفحه هایی single planeایکون ها دوتایی نمایش داده می شوند.
برای صفحه ی ازمایشی من از فایل ایکس ام ال منو که تنها یک about entryدارد استفاده کرده ام. و از فایل ایکس ام ال که شامل edit entryمیشود درقسمت فرگمنت استفاده کردده ام.about entry برای فرگمنت لازم نیست چون که قبلا از قسمت activityاضافه شده و فرقی هم نمیکند که صفحه در حالت single plane و یا double planeباشد.

تغییر ترتیب ایتم های حرکتی

به صورت پیش فرض اندروید ایتم های حرکتی فرگمنت رو درپشت ایتم های activityنشان می دهد.اگر از چندین فرگمنت استفاده کنید اندروید انها را به ترتیب ساخته شدنشان نمایش می دهد.
این ترتیب پیش فرض دقیقا ان چیزی نیست که ما میخواهیم.برای مثال احتمال این وجود دارد که شما بخواهید از ایتم aboutدر منوی overflowبه عنوان اخرین ورودی استفاده کنید حتی اگر بعدا فرگمنت ورودی های overflow-menuبیشتری را بعدا اضافه کند.همچنین بعضی حرکت ها بیشتر ازبقیه مورد استفاده قرارمیگیرند و میخوایم که انها را درقسمت چپ قراربدیم که صرف نظر از اندازه صفحه های مختلف باز هم کنار صفحه نمایش داده بشوند. اهمیت ایتم ها به این بستگی دارد که درحال حاضر داریم از کدام فرگمنت استفاده میکنیم.
برای این منظور میتوانید از android:orderInCategoryمتناسب با item elementها استفاده کنید.
منوی فایل fragment_itemdetail.xml:

منوی فایل activity_itemdetail.xml:

ودراخر منوی فایل ایکس ام ال activity_itemlist.xml:

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

تنظیم رویدادها

مثل همیشه میتوانیم با استفاده ازمتدonOptionsItemSelected() ایتم های منو را تنظیم کنیم.

 

اما به خاطرداشته باشید که اول باید onOptionsItemSelected()را فرابخوانیم.تنها درصورتی از متد فرگمنت استفاده میکنیم که activityاز eventاستفاده نکند.

افزودن وحذف اکشن آیتم ها

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

برنامه Prime Guide و نمایش آیکون ها
داخل این اپ با انتخاب یک برنامه میتوانید راجع به آن برنامه اطلاعات به دست بیاورید. اگه برنامه ای رو انتخاب کنید که هنوز شروع نشده است میتوانید اون برنامه را علامت گذاری کنید و براش زنگ اعلان برنامه تنظیم کنید. اما درعوض اگه برنامه شروع شده باشد و یا تمام شده باشد این گزینه ها نشان داده نمیشوند. چون خیلی بی معناست که بخواهیم برای برنامه ای که شروع شده زنگ اعلان تعیین کنیم. اما بقیه ی آیکن ها در هر دو شرایط کار میکنند.
خب چجوری این کارایی که گفتیم را انجام بدیم؟ میتوانید یا ازفایل های مختلف ایکس ام ال منو برای یک سری از آیتم های اکشن استاتیک (ثابت) استفاده کنید و یا می توانید یا میتوانید با استفاده از برنامه فایل های منو را بردارید و اضافه کنید. چون روش دوم خیلی منعطف تر هست من درپاراگراف بعدی روش دوم را توضیح میدهم.
ابتدا باید تمام object های منو را دراختیار داشته باشید. این کار را میتوانید با استفاده از متد onCreateOptionsMenu() انجام دهید.
الان میتوانید از این object های منو برای تغییر visibility آیتم اکشن ها استفاده کنید ویا اینکه کاملا از منو حذفشان کنید.
میتوانید visibility را به این شکل تغییر دهید

باتوجه به ترتیب فراخوانی متد های فرگمنت وجود گزینه null دراین کد ضروری است. البته اندروید قبل از فراخوانی onCreateOptionsMenu() متد lifecycle را اجرا می کند. بنابراین object menu باید در متد onCreateView() درحالت null قراربگیرد . ما از این متد برای ساختن event handler ها استفاده می کنیم.
اگز بخواهید که اکشن آیتم ها را به صورت کامل حذف کنید به صورت زیر عمل میکنید:

همانطور که در چند پاراگراف بعد خواهید دید اضافه کردن آیتم منو یک مقدار سخت تر ازاین است که دوباره visible بشود.بنابراین اگر بخواهید با توجه به حالت فرگمنت اکشن آیتم ها را تغییر دهید من پیشنهاد میکنم که به جای اضافه و حذف کردن ، visibility را تغییر دهید.
تااینجا به شما یاد دادم که چگونه اکشن آیتم ها را حذف کنید. با این حال میتوانید انها را اضافه هم بکنید. میتوانید ازچند متدadd() در کلاس منو استفاده کنید. برای مثال کدهای فرگمنت زیر آیتم ها را مثل کد ایکس ام ال اضافه میکند :

اولین پارامتر گروه را تنظیم میکند. اگه گروه ندارید از Menu.NONE استفاده کنید. دومین پارامتر آی دی را که میخواهید استفاده کنید را تنظیم میکند که این مشابه متد onOptionsItemSelected( است که بعدا از ان برای کلیک های آیتم منو استفاده خواهید کرد. سومین پارامتر مربوط به شماره ی ترتیب هاست و اخرین پارامتر عنوان متنتان را مشخص میکند. به یاد داشته باشید که اندروید از عنوان متن برای نشان دادن usage hints ویا روخوانی اندازه ها با برنامه ی screenreader استفاده میکند. پس برای این گزینه هرگز از null استفاده نکنید.
همانطورکه نمونه های کد نشان میدهند شما باید ایکن و اندازه های showAsAction را با متد هایی جداگانه اضافه کنید .

جمع بندی

در این پست به شما نشان دادم که چجوری میتوانید از متد onCreateOptionsMenu() برای اضافه کردن اکشن آیتم های متناسب با فرگمنت و آیتم های موجود در action bar استفاده کنید.
از آنجایی که ترتیب پیش فرض اندروید برای اضافه کردن این آیتم ها طوری نیست که ما میخواهیم ، پس میتوانیدم با اضافه کردن android:orderInCategory به آیتم های منو از داخل فایل ایکس ام ال این ترتیب را تغییر دهیم.
دراخر یاد گرفتید که چگونه visiblity آیتم های منو را تغییر دهید،چگونه کاملا حذفشان کنید و چگونه منو آیتم های جدید اضافه کنید.

ترجمه متن: کاری از گروه آموزشی لرن اس تی یو، مهرخ اکبری

پاسخ دهید