![]() |
![]() |
ایجاد یک Fragment
برای ایجاد یک Fragment باید یک کلاس از نوع Android.App.Fragment ایجاد و متد OnCreateView آن را در صورت نیاز رونویسی کنیم. زمانیکه Fragment در صفحه قرار می گیرد و یک view را برای ما باز می گرداند، متد OnCreateView توسط Activity که در آن قراردارد فراخوانی خواهد شد. متد OnCreateView بطور پیشفرض این view را با افزودن یک فایل layout به container پدر، ایجاد می کند. زمانیکه اندروید، مشخصات لایه پدر را در UI (رابط کاربری) بکار می برد، مشخصات container ها اهمیت خواهد داشت. لطفا به کد زیر توجه کنید:
1 2 3 4 5 6 7 |
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.Inflate(Resource.Layout.Example_Fragment, container, false); } |
قطعه کد بالا یک view به نام Resource.Layout.Example_Fragment ایجاد کرده و آنرا به عنوان یک view فرزند به ViewGroup اضافه می کند.
توجه داشته باشید که زیرکلاس های Fragment بطور پیشفرض سازنده ای بدون پارامتر ورودی دارند.
اضافه کردن Fragment در Activity
به دو طریق می توانیم یک Fragment در Activity قرار دهیم:
• تعریفی:
Fragment ها را می توان در فایلهای .axml و بوسیله تگ
• برنامه نویسی:
در این روش Fragment ها بصورت داینامیک و با استفاده از کلاس FragmentManager تعریف می شوند.
چگونگی استفاده از کلاس FragmentManager را در ادامه آموزش خواهیم داد.
با استفاده از یک Fragment تعریفی
برای افزودن Fragment به یک چیدمان، از تگ
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="utf-8"?> <fragment class="com.xamarin.sample.fragments.TitlesFragment" android:id="@+id/titles_fragment" android:layout_width="fill_parent" android:layout_height="fill_parent" /> |
مثال زیر چگونگی تعریف یک fragment با استفاده از خصوصیت android:name را نشان می دهد:
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="utf-8"?> <fragment android:name="com.xamarin.sample.fragments.TitlesFragment" android:id="@+id/titles_fragment" android:layout_width="fill_parent" android:layout_height="fill_parent" /> |
زمانیکه Activity ساخته می شود، اندروید از هر fragment که در فایل چیدمان تعریف شده است، یک نمونه ایجاد کرده و view ایجاد شده از طریق متد OnCreateView را در مکان fragment قرار می دهد. framgment هایی که به روش تعریفی به Activity اضافه می شوند استاتیک بوده و از ابتدا تا انتهای چرخه عمر Activity در آن خواهند بود و امکان حذف و جایگزین کردن این نوع fragment ها در چرخه عمر Activity وجود ندارد.
هر fragment باید دارای یک شناسه یا ID یکتا باشد:
android:id: مقدار این خصوصیت، برای هر عنصر تشکیل دهنده رابط کاربری در یک فایل چیدمان، منحصر به فرد و یکتا خواهد بود.
android:tag: مقدار این خصوصیت، یک رشته یکتا خواهد بود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="+@id/fragment_container" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="com.example.android.apis.app.TitlesFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> |
نکته: هر چند که می توانید با Xamarin.Android در namespace ها از کاراکترهای بزرگ برای نامگذاری ها استفاده کنید ولی برای نامگذاری package ها حتما از کاراکترهای کوچک استفاده کنید. چون اندروید اجازه استفاده از کاراکترهای بزرگ برای نام گذاری پکیج ها را به شما نخواهد داد. اگر پکیج شما دارای کاراکترهای بزرگ باشد به هنگام ساخت view یک exception دریافت خواهید کرد.
1 2 3 4 5 6 7 |
<fragment class="com.example.DetailsFragment" android:id="@+id/fragment_content" android:layout_width="match_parent" android:layout_height="match_parent" /> |
یا
1 2 3 4 5 6 7 |
<fragment class="Com.Example.DetailsFragment" android:id="@+id/fragment_content" android:layout_width="match_parent" android:layout_height="match_parent" /> |