پیاده سازی فرگمنت ها
فرگمنت ها
در صفحه نمایش های کوچک,یک اکتیویتی تمام صفحه را اشغال می کند.پس با استفاده از چند نما به رابط کاربری برنامه ی خود شکل می دهیم.یک اکتیویتی اصولاً یک ظرف برای نما ها است.اما اگر برنامه در یک صفحه نمایش بزرگتر دیده شود مانند تبلت ها,کاملاً بهم ریخته به نظر می رسد.و دلیل این است که نمای شما برای صفحه نمایش کوچک طراحی شده است و برای صفحه نمایش های بزرگ تر میبایست دوباره طراحی را تغییر داد.این حالت باعث پیچیدگی در طراحی نما خواهد شد.بنابراین بهتر است برای رفع این مشکل چند اکتیویتی کوچک ایجاد کرد که هر کدام دارای نمای خود باشد.در زمان اجرا, یک اکتیویتی می تواند شامل چند اکتیویتی کوچک باشد که البته تعداد آنها به جهت صفحه نمایش بستگی دارد.در اندروید 3 به بعد این اکتیویتی های کوچک را فرگمنت ها نامیدند.
فرگمنت ها یک نوع دیگری از اکتیویتی ها هستند که برای نمایش نما به وجود می آیند ,دقیقاً مثل اکتیویتی ها.فرگمنت ها همیشه در دل اکتیویتی ها جای می گیرند.
نتیجه میگیریم که فرگمنت ها راه حل کاملی جهت رفع مشکل نماها در رابط کاربری اندروید هستند.
1.پروژه ی جدیدی با نام Fragments ایجاد کنید.
2.در پوشه ی res/layout یک فایل جدید با نام fragment1.xml ایجاد کنید و محتوای آن را به صورت زیر تغییر دهید:
fragment1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#00FF00">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is fragment #1"
android:background="#000000"
android:textSize="25sp"
/>
</LinearLayout>
3.مرحله ی قبل را تکرار کنید و دوباره در همان مکان فایل جدیدی با نام fragment2.xml ایجاد کنید و تغییرات زیر را در آن اعمال کنید:
fragment2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#FFFE00">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is fragment #2"
android:background="#000000"
android:textSize="25sp"
/>
</LinearLayout>
4.تغییرات زیر را در فایل main.xml اعمال کنید:
main.xml
<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:orientation="horizontal">
<fragment
android:name="com.PRG.Fragments.Fragment1"
android:id="@+id/fragment1"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
<fragment
android:name="com.PRG.Fragments.Fragment2"
android:id="@+id/fragment2"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
/>
</LinearLayout>
5.در زیر مجموعه ی پکیج,دو کلاس با نام های Fragment1.java و Fragment2.java ایجاد کنید:
6.تغییرات زیر را در فایل Fragment1.java اعمال کنید:
Fragment1.java
package com.PRG.fragments;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1 extends Fragment{
public View onCreateView(LayoutInflater inflater
, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment1, container,false);
}
}
7.تغییرات زیر را در فایل Fragment2.java اعمال کنید:
Fragment2.java
package com.PRG.fragments;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment2 extends Fragment{
public View onCreateView(LayoutInflater inflater
, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment2, container,false);
}
}
8.برنامه را اجرا کنید.
روش کار
یک فرگمنت بسیار شبیه به اکتیویتی است.چون دارای یک کلاس java است و همچنین رابط کاربری خود را از یک XML بارگذاری می کند.یک فایل XML دارای تمامی عناصر رابط کاربری است که شما از یک اکتیویتی انتظار دارید.کلاس جاوایی که برای فرگمنت نوشته می شود باید کلاس پایه ی Fragment را بسط دهد.
Title
public class Fragment1 extends Fragment { }
برای ترسیم رابط کاربری یک فرگمنت ,متد ()onCreateView را override کنید.این متد یک شئ از نوع View را بر می گرداند:
onCreateView
public View onCreateView(LayoutInflater inflater
, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment1, container,false);
}
در اینجا از شئ LayoutInflater برای برجسته کردن رابط کاربری از فایل XML مورد نظر استفاده شد.آرگومان container به ViewGroup والد اشاره دارد که همان اکتیویتی است که شما می خواهید آن را در فرگمنت Embed کنید.آرگومان saveInstanceState به شما این قابلیت را می دهد تا فرگمنت را به حالت ذخیره شده ی قبلی بازگردانید.
برای افزودن فرگمنت به اکتیویتی از عنصر <fragment> استفاده کنید:
fragment
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#FFFE00">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is fragment #2"
android:background="#000000"
android:textSize="25sp"
/>
</LinearLayout>
توجه داشته باشید که به هر فرگمنت یک شناسه منحصر به فرد اختصاص دهید.میتوانید این کار را بوسیله ی ویژگی های android:id یا android:tag انجام دهید.
- نوشته شده توسط سعید نوشادی
- بازدید: 7895