23 -اندرويد – Fragments – إنشاء Fragments

ملاحظة : الموضوع عبارة عن حلقة من حلقات سلسلة برمجة وتطوير اندرويد Android Development

اندرويد : إنشاء ال  Fragments

السلام عليكم ورحمة الله وبركاته

سوف نتعلم ضمن هذا الدرس مايلي:

  • إنشاء صف Fragment
  • اضافة Fragment إلى فعالية activity عبر استخدام XML.

بإمكاننا تخيل ال fragment على انه عبارة عن جزء وحدوي modular section  ضمن فعالية ما, ويكون لهذا ال fragment  دورة حياته الخاصة به lifecycle, ويتلقى احداث الادخال الخاصة به input events , والتي بإمكاننا اضافتها او ازالتها اثناء عمل الفعالية (اي نوع من “الفعالية الجزئية sub activity” التي يمكن اعادة استخدامها ضمن فعاليات مختلفة).

يبين لنا هذا الدرس كيف بإمكاننا القيام ب “extend” لصف Fragmentعبر استخدام مكتبة الدعم Support Library بحيث يبقى تطبيقك متوافقا مع الاجهزة التي تشغل انظمة باصدارات قديمة مثل اصدار Android 1.6.

ملاحظة : في حال قررت لسبب او لآخر بأن الحد الادنى الذي يحتاجه تطبيقك من واجهة التطبيقات البرمجية API level هو 11 او اعلى , عندها فأنت لست بحاجة لاستخدام مكتبة الدعم Support Library وبإمكانك بدلا من ذلك استخدام صف Fragmentالموجود ضمن اطار العمل وبذلك سوف تستخدم APIs المترافقة معه.

ولكن ينبغي الانتباه إلى ان هذا الدرس يقوم بالتركيز على استخدام APIs الموجودة ضمن مكتبة الدعم Support Library, والتي بدورها تستخدم توقيع حزمة محدد , وقد تستخدم في بعض الاحيان اسماء مختلفة ل API عن تلك المتضمنة ضمن الاصدار المترافق مع منصة العمل.

fragments

إنشاء صف Fragment

لكي ننشأ fragment , يتوجب علينا وراثة الصف Fragment  , اي فعليا القيام ب extentd للصف Fragment,ومن ثم نقوم ب override للتوابع المتعلقة بدورة الحياة lifecycle , بحيث لنضع المنطق المناسب لتطبيقنا ضمنها, وذلك بشكل مشابه للطريقة التي نتعامل فيها مع صف Activity.

هنالك فرق وحيد عند إنشاء Fragment, ويكمن في انه يتوجب علينا عندها استخدام الاستدعاء onCreateView()لتحديد التنسيق layout.

في الواقع, هذا عبارة عن الاستدعاء الوحيد الذي تحتاجه لكي يعمل ال 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 ان يقوم بتنجيز بقية الاستدعاءات الخاصة بدورة الحياة lifecycle callbacks والتي تمكنك من ادارة حالة ال fragment عندما تتم اضافتها او ازالتها من الفعالية, وكذلك عندما يتم نقل الفعالية بين حالات دورة حياة الفعاليةactivity lifecycle .

على سبيل المثال, عندما يتم استدعاء التابع onPause(), فإن كل fragment ضمن الفعالية تتلقى ايضا الاستدعاء onPause().

لمزيد من المعلومات حول دورة حياة ال fragment  وحول توابع الاستدعاء الخاصة بها , بإمكانكم مراجعة الرابط التالي Fragments.

اضافة Fragment إلى فعالية ما باستخدام XML

بما ان ال fragment  تتميز بأنها من مكونات واجهة المستخدم القابلة لاعادة الاستخدام, فإنه يجب ان يترافق كل مستنسخ من صف Fragment  مع الأب  FragmentActivity. بإمكانك تحقيق هذا الترافق والتلازم عبر تعريف كل fragment ضمن ملف التنسيق XML الخاص بالفعالية.

ملاحظة : FragmentActivityعبارة عن فعالية خاصة مزودة من قبل مكتبة الدعم للتعامل مع ال fragments وذلك على اصدارات النظم القديمة , وتحديدا الاقدم من API level 11. في حال كان اقدم اصدار للنظام مدعوم من قبل الجهاز هو API level 11 أو اعلى, عندها فإنه بالامكان استخدام Activityالاعتيادية.

فيما يلي مثال على ملف التنسيق الذي يقوم باضافة اثنين من ال fragments  إلى فعالية ما , وذلك عندما يتم اعتبار شاشة الجهاز “كبيرة” large ( ويتم ذلك عبر اضافة موصف large إلى اسم المسار الخاص بالتنسيق كما هو موضح ادناه).

res/layout-large/news_articles.xml:

<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
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>

ملاحظة : لمزيد من المعلومات حول نشاء التنسيقات الخاصة باحجام الشاشات المختلفة بإمكانكم الرجوع إلى الرابط Supporting Different Screen Sizes.

فيما يلي ادناه ترميز يبين لنا فعالية 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);
}
}

ملاحظة : عندما تقوم بإضافة fragment  إلى تنسيق فعالية عبر تعريف ال fragment  ضمن ملف تنسيق XML, فإنك لن تستطيع ان تقوم بإزالة ال fragment في زمن التنفيذ.

في حال كنت تخطط للتبديل في عرض ال fragments اثناء تفاعل المستخدم مع التطبيق, فإنه يتوجب عليك اضافة ال fragment  إلى الفعالية عند بدء الفعالية كما سنوضح في الدرس القادم.

وإلى لقاء قريب في حلقة قادمة , وإلى ذلك الحين استودعكم الله والسلام عليكم ورحمة الله وبركاته.

المصطلح

الترجمة

module

وحدة

Encapsulate

يغلف

Implement

تنجيز – اي كتابة الرماز المناسب

Fragment

سوف نبقي على المصطلح كما هو حتى لا تتحول الترجمة إلى ترجمة مضللة.

Advertisements

, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

  1. أضف تعليق

اترك رد

Please log in using one of these methods to post your comment:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: