ایجاد کردن فرگمنت ها

چاپ

آن چه در این درس خواهید آموخت:

  1. ایجاد یک کلاس Fragment
  2. افزودن Fragment به یک Activity با XML

مواردی که باید مطالعه کرده باشید:

  • Fragmentها

خودتان امتحان کنید:

دانلود دمو »

ایجاد یک Fragment

می توانیم به fragment به عنوان یک بخش مجزا از یک Activity نگاه کنیم که این بخش به خودی خود، چرخه ی حیات دارد، رویدادهای ورودی را دریافت می کند، و در نهایت می توانید در حالیکه activity در حال اجراست،  آن را اضافه کنید یا حذف کنید. (مجموعه ای از "sun activity"ها که می توانند در activityهای مختلف استفاده ی مجدد شوند.) این درس به شما نشان می دهد که چگونه کلاس Fragment را با استفاده از کتابخانه ی پشتیبان بسط دهیم و در نتیجه برنامه ی شما با دستگاه هایی که سیستم های اندروید قدیمی دارند، سازگار می شود.

توجه: اگر کمترین سطح API را برای برنامه ی خود 11 یا بیشتر در نظر گرفتید، دیگر نیازی به استفاده از کتابخانه ی پشتیبان نیست و می توانید از همان کلاس Fragment که در فریم ورک قرار دارد استفاده کنید. بنابراین در جریان باشید که در این آموزش تمرکز روی API هایی است که می بایست از کتابخانه ی پشتیبان استفاده کنند.

پیش از اینکه این شروع به یادگیری این آموزش نمایید، می بایست پروژه ی اندروید خود را جوری تنظیم فرمایید که از کتابخانه ی پشتیبان استفاده کند. اگر از کتابخانه ی پشتیبان قبلاً استفاده نکرده اید، از کتابخانه ی v4 آن استفاده کنید. با این وجود می توانید از نسخه ی appcompat v7 را استفاده کنید که از action bar نیز پشتیبانی می کند.


ایجاد یک کلاس Fragment


برای ایجاد یک Fragment، از کلاس Fragment ارث بری کنید، سپس متدهای کلیدی چرخه ی حیات را لغو و بازنویسی نمایید تا به این وسیله، منطق برنامه خود را درج نمایید، مانند روشی که برای یک کلاس activity به کار می گیرید.

یک تفاوت در ایجاد Fragment این است که شما می بایست از تابع ()onCreateView برای تعریف چیدمان استفاده کنید. در حقیقت، فقط همین  فراخوانی را برای اجرای یک fragment نیاز دارید. برای مثال، در اینجا یک fragment ساده وجود دارد که در آن چیدمان مشخص شده است:

مثال ایجاد یک Fragment

 
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 می بایست متدهای مربوط به چرخه ی حیات خودش را پیاده سازی کند. این متدها به شما اجازه می دهد وضعیت fragment را در زمان هایی که اضافه می شود یا از Activity حذف می شود یا انتقل بین وضعیت های چرخه ی حیات رخ می دهد مدیریت کنید. برای نمونه، هنگامی که متد ()onPause روی یک Activity صدا زده می شود، هر کدام از Fragment های آن activity متد ()onPause را دریافت می کنند.


افزودن Fragment به یک Activity با استفاده از XML


در حالی که fragmentها کامپوننت های ماژولار با قابلیت استفاده ی مجدد هستند، هر نمونه از کلاس Fragment می بایست با یک Activity والد با عنوان FragmentActivity منطبق باشد. برای رسیدن به این انطباق می بایست در فایل XML چیدمان مربوط به activity هر یک از fragmentهای آن را تعریف کرد.

Note

توجه: FragmentActivity عبارت است از یک activity خاص که در کتابخانه ی پشتیبان وجود دارد و fragmentها را روی سیستم های اندروید با نسخه های پایین تر از API 11 مدیریت می کند. اگر شما از نسخه های اندروید مربوط به API سطح 11 به بعد پشتیبانی می کنید، آنگاه می توانید از همان Activity معمول استفاده کنید.



در زیر یک فایل چیدمان به عنوان مثال آودرده شده است. در این فایل، هنگامی که صفحه ی نمایش "large" در نظر گرفته می شود، دو fragment به یک activity اضافه شده است. (این کار را با پسوند large در نام دایرکتوری انجام می دهیم)

افزودن fragment به Activity

 

res/layout-large/news_articles.xml

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
   
android:orientation="horizontal"
   
android:layout_width="fill_parent"
   
android:layout_height="fill_parent">

   
<fragmentandroid:name="com.example.android.fragments.HeadlinesFragment"
             
android:id="@+id/headlines_fragment"
             
android:layout_weight="1"
             
android:layout_width="0dp"
             
android:layout_height="match_parent"/>

   
<fragmentandroid: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>


نکته: برای مطالعه ی بیشتر در زمینه صفحات نمایش با اندازه ی مختلف، به آموزش اندروید-صفحه نمایش مختلف مراجعه فرمایید.

حالا زمان این است که چیدمان را روی Activity اعمال کنیم:

اعمال  چیدمان روی activity

 
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivityextendsFragmentActivity{
   
@Override
   
publicvoid onCreate(Bundle savedInstanceState){
       
super.onCreate(savedInstanceState);
        setContentView
(R.layout.news_articles);
   
}
}
 

اگر از کتابخانه appcompat v7 استفاده می کنید کتابخانه ی شما می بایست از ActionBarActivity ارث بری کند، که این کلاس به نوبه ی خود از کلاس FragmentActivity ارث بری می کند.

Note

توجه: وقتی که در فایل XML چیدمان، fragment را به Activity اضافه می کنیم، نمی توانیم در زمان اجرا آن را حذف کنیم. اگر قصد دراید که با fragmentهای داخل و خارج Activity توسط کاربر تعامل داشته باشید، می بایست fragment را زمانی که activity برای اولین بار شروع می شود به آن اضافه کنید. این موضوع در آموزش بعدی توضیح داده شده است.