19- ساخت یک Fragment
آدرس مطلب اصلی: http://developer.android.com/training/basics/fragments/index.html
در این درس ساخت یک کلاس fragment را خواهید آموخت
2- اضافه کردن یک فرگمنت به activity در حال استفاده ی xml
پیش نیاز : fragment
Fragment را به صورت یک بخش ماژولار activity تصور کنید که دوره حیات خودش را دارد رخ دادهای ورودی خود را دریافت می کند و هم چنین در هنگامی که activity در حال اجرا است می توانید اضافه و یا کم نمایید.
یک جورایی شبیه sub activity های متفاوت دوباره استفاده می کند، این درس دوباره به شما نشان خواهد داد که چگونه کلاس فرگمنت را با استفاده از support library گسترش دهید که Application شما با device هایی که روی آنها اندرویدهای قدیمی 6/1 را هم نصب شده است اجرا شود .
نکته :
اگر بخواهید که API را به حداقل برسانید Application های شما یازده یا بیشتر نیاز دارد بنابراین نیازی به استفاده از support library ندارید و به جای آن می توانید از کلاس فرگمنت پیش ساخته شده ی framework ها استفاده کنید و آن را با API ها متصل نمایید فقط باید بدانید که این درس روی استفاده از Api ها ی library تمرکز کرده است که از بسته امضا شده مشخص استفاده می کند و گاهی اوقات کمی از نام هایApp های را که با ورژن های دیگر روی آن platform وجود دارند را تغییری می دهند . قبل از شروع این درس، پروژه ی اندروید خود را طوری تنظیم کنید که از support library استفاده کند . اگر قبلا از support library استفاده نکرده اید با پیروی کردن از راهنمای support library setup پروژه را برای استفاده از V4library تنظیم کنید
هم چنین برای activity هایتان می توانید actionbar را نیز که به جای v7 appcompatlibrary که با android 2.1 (API سطح 7) هماهنگ است
ساخت یک کلاس fragment
برای ساخت یک کلاس fragment کلاس fragment را گسترش دهید
پس متد های دوره حیات را که برای منطق برنامه جایگذاری می شود به طور مشابه راهی که یک کلاس activity(دارد)
یک تفاوت به هنگام ساخت یک فرگمنت این است که باید از فراخوانی onCreateView() استفاده کنید که layout ها تعریف شود .
در حقیقت تنها فراخوانی است که به منظور گرفتن یک فرگمنت در حال اجرا نیاز به فراخوانی دارید، همین است،
مثلا برای مثال، در این جا یک فرگمنت ساده که layot های خود را مشخص می کنم، داریم
import android.os.Bundle;
import
android.support.v4.app.Fragment;
import
android.view.LayoutInflater;
import
android.view.ViewGroup;
public
class
ArticleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//
Inflate the layout for this fragment
return inflater.inflate(R.layout.article_view, container, false);
}
}
درست مثل یک activity یک fragment باید در فراخوانی های دوره حیات دیگر را پیاده سازی می کند که به شما اجازه مدیریت حالت هایش اعم از اضافه یا کم کردن از activity را می دهد. مثلا وقتی تابع onpauseactivity فراخوانی شد هر فرگمنت در آن activity باید فراخوانی onpause را دریافت کند
برای اطلاعات بیشتر درباره حیات فرگمنت و فراخوانی متدها به راهنمای فرکمنت مراجعه نمایید
اضافه کردن یک fragment به activity با استفاده از xml در حالی که فرگمنت ها قابل دوباره استفاده شدن دارند کامپوننتهای ماژولار ui کلاس فرگمنت فرضی باید با parent ، fragment activity در ارتباط باشد
شما باید چنین ارتباطی را بدست بیاورید با استفاده از تعریف هر fragment به همراه layout فایل xml ، activity تان،
توجه
فرگمنت Activity ، Activity مخصوصی است که در ساپورت library فراهم شده است تا در سیستم های با ور ژن API سطح 11 ، هم بتواند انجام دهد .
اگر پایین تر ورژن سیستم شما، از API سطح 11 یا بیشتر حمایت کند باید به یک regular activity استفاده نمایید و
در این جا یک مثال از layout فایل که دو فرگمنت را به یک activity اضافه می کند، هنگامی که صفحه نمایش device بزرگ شود در دایرکتوری naw با qulifylarg نشان داده شده.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment android:name="com.example.android.fragments.HeadlinesFragment"
android:id="@+id/headlines_fragment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"
/>
<fragment android:name="com.example.android.fragments.ArticleFragment"
android:id="@+id/article_fragment"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent"
/>
</LinearLayout>
برای انضمام layout به activity
import android.os.Bundle;
import
android.support.v4.app.FragmentActivity;
public
class
MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_articles);
}
}
اگر شما از V7 استفاده می کند activity شما باید به جای آنActionBarActivityکه یک زیر کلاس از فرگمنت activity است، گسترش دهید.
نکته: هنگام اضافه کردن یک فرگمنت به یک activity layout به وسیله تعریف فرگمنت در layout XML نباید فرگمنت را در زمان اجرا از بین ببرید، اگر قصد جابجایی فرگمنت ها را درون و بیرون کار کاربر دارید .
شما به یک فرگمنت به activity زمانی که برای اولین بار activity شروع می شود اضافه کنید، همانگونه که درس بعدی به آن اشاره خواهد شد.
- ۹۳/۰۳/۰۳
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.