میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

تعریف fragment برای activity در اندروید

برای استفاده از fragment جدید خود، می توانید آن را به صورت static و به وسیله ی تگ fragment در فایل layout اضافه نمایید. خصیصه ی android:name (attribute) به کلاس مربوطه اشاره دارد.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:baselineAligned="false"
android:orientation="horizontal" >
<fragment
android:id="@+id/listFragment"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
class="com.example.android.rssreader.MyListFragment"
tools:layout="@layout/fragment_rsslist_overview">
</fragment>
<fragment
android:id="@+id/detailFragment"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent"
class="com.example.android.rssreader.DetailFragment"
tools:layout="@layout/fragment_rssitem_detail">
</fragment>
</LinearLayout>

استفاده از این روش برای زمانی توصیه می شود که چندین فایل layout ثابت و static برای تعریف ظاهر برنامه دارید که هریک ویژه ی یک دستگاه با config خاص طراحی شده است.


مدیریت fragment در زمان اجرا و به صورت dynamic

کلاس FragmentManager به شما این امکان را می دهد تا fragment ها را در activity layout اضافه/حذف یا جایگزین نمایید. این کلاس به وسیله ی متد () getFragmentManager قابل دسترسی می باشد. اصلاحات و تغییراتی که می خواهید اعمال کنید باید در طی یک transaction (تراکنش) به وسیله ی کلاس FragmentTransaction انجام شود. به منظور ویرایش fragment

ها در یک activity  می بایست یک مکان نگهدار (FrameLayout ( placeholder در فایل layout تعریف نمایید.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/listcontainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/detailscontainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</LinearLayout>

با استفاده از FragmentManager می توانید fragment موجود در container را با fragment دیگری جایگزین نمایید.

 

// get fragment manager
FragmentManager fm = getFragmentManager();
// add
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.your_placehodler, new YourFragment());
// alternatively add it with a tag
// trx.add(R.id.your_placehodler, new YourFragment(), "detail");
ft.commit();
// replace
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.your_placehodler, new YourFragment());
ft.commit();
// remove
Fragment fragment = fm.findFragmentById(R.id.your_placehodler);
FragmentTransaction ft = fm.beginTransaction();
ft.remove(fragment);
ft.commit();

یک fragment جدید جایگزین fragment جاری در این container می شود.

می توانید یک تراکنش یا transaction را با استفاده از متد () addToBackStack به backstack اندروید اضافه نمایید. با این کار عملیات را به history stack از activity مورد نظر اضافه می کنید و به کاربر این امکان را می دهید تا تغییرات را از طریق دکمه ی بازگشت (back) به حالت قبلی بازگرداند.


بررسی اینکه آیا یک fragment در layout حاضر است یا خیر

به منظور بررسی اینکه آیا یک fragment در layout مورد نظر حضور دارد یا خیر، می توانید از کلاس FragmentManager کمک بگیرید. کافی است متد () isLayout را فراخوانی کرده و بررسی کنید آیا fragment مورد نظر از طریق layout به activity اضافه شده است یا خیر.

 

DetailFragment fragment = (DetailFragment) getFragmentManager().
findFragmentById(R.id.detail_frag);
if (fragment==null || ! fragment.isInLayout()) {
// start new Activity
}
else {
fragment.update(...);
}

بررسی تعداد fragment ها

منطق برنامه در activity به طور قطع به سناریو و شرایط جاری بستگی دارد (اینکه آیا صفحه تک قطعه است یا از چند fragment و قطعه تشکیل شده.) می توان با نوشتن یک قطعه کد شرطی به تعداد fragment در اپلیکیشن پی برد. روش های متعددی برای اجرای این عملیات وجود دارد. روش اول این است که یک فایل تنظیمات/ configuration در پوشه ی محتوا و منابع پروژه (values ) ایجاد نمایید. جفت کلید/مقدار ( key/value) به صورت پیش فرض بر روی false تنظیم می شوند. سپس یک فایل تنظیمات دیگر این مقدار را جهت سازگاری با اندازه ی دلخواه نمایشگر بر روی true قرار می دهد.

نمونه ی زیر یک فایل تنظیمات پیش فرض به نام config.xml را نمایش می دهد.

 

<resources>
<item type="bool" name="twoPaneMode">false</item>
</resources>

حال همین فایل را در پوشه ی res/values-land با مقداری متفاوت (این بار true) ایجاد نمایید.

 

<resources>
<item type="bool" name="twoPaneMode">true</item>
</resources>

می توانید با استفاده نوشتن دستور زیر، به اطلاعات مربوط به وضعیت جاری ( state) دسترسی داشته باشید.

 

getResources().getBoolean(R.bool.twoPaneMode);

افزودن آبجکت fragment transition به backstack

می توانید آبجکت FragmentTransition را به backstack اضافه نموده و به کاربر این امکان را بدهید تا با استفاده از دکمه ی بازگشت ( back) به fragment قبلی بازگردد.

برای این منظور شما می توانید متد () addToBackStack را بر روی آبجکت FragmentTransition فراخوانی کنید.

 


استفاده از افکت های تعریف شده توسط Property Animation API برای حرکت بین fragment ها

در طول اجرای یک تراکنش ،fragment می توانید با استفاده از متد ()setCustomAnimations از مجموعه توابع ،Property Animation به راحتی animation تعریف نمایید (برای حرکت و انتقال بین fragment ها انیمیشن اعمال نمایید.)
البته می توانید با فراخوانی متد ()setTranstion بسیاری از انیمیشن های استاندارد اندروید را برای انتقال بین fragment ها اعمال نمایید. برای پیاده سازی انیمیشن می بایست constant هایی
که با FragmentTransaction.TRANSIT_FRAGMENT_* شروع می شوند را تعریف نمایید
هر دو متد نام برده به شما امکان می دهند تا یک انیمیشن آغاز ( entry animation
) و یک انیمیشن پایان ( exit) تعریف نمایید.

 


ماندگارسازی و ذخیره ی دائمی داده در fragment ها

اغلب برنامه نویس لازم دارد که داده هایی از اپلیکیشن را در حافظه به طور دائمی ذخیره کند.
برای این منظور کافی است از یک فایل ساده یا دیتابیس SQLite استفاده کند.

 


نگهداری و بازگردانی اطلاعات پس از تغییر در تنظیمات و config

اگر می خواهید تغییرات در تنظیمات و پیکربندی را ماندگارسازی نمایید، در آن صورت می توانید از آبجکت اپلیکیشن نیز استفاده کنید.
علاوه بر روش ذکر شده، شما می توانید متد (setRetainState(true را بر روی fragment فراخوانی نمایید. با این کار اطلاعات مربوط به وضعیت نمونه ی fragment بین تغییرات در تنظیمات fragment ماندگار می شود. لازم به ذکر است که این رویکرد تنها زمانی کارگر واقع می شود که fragment ها به backstack اضافه نشده باشند. در این صورت، کافی داده ها را به عنوان یک عضو (در قالب یک فیلد) ذخیره نمایید.
توجه: Google استفاده از این متد را برای fragment هایی که UI دارند به هیچ وجه توصیه نمی کند.
می توانید با فراخوانی متد () onSaveInstanceState داده ها را در آبجکت Bundle قرار دهید.
سپس می توانید این داده ها را با استفاده از متد () onActivityCreated بازیابی نمایید.

 


امیدواریم  آموزش تعریف fragment برای activity در اندروید نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟