ماهو التجزئة او التقسيم Fragment في برمجة الأندرويد Android Fragment#
ماهو التجزئة او التقسيم Fragment في برمجة الأندرويد
Android Fragment#
ماهو التجزئة او التقسيم Fragment في برمجة الأندرويد Android Fragment#
ماهو التجزئة Fragment.
ببساطة هي تجزئة او تقسيم الأنشطة إلى عدة أنشطة فرعية يتم استخدامها عند تفاعل المستخدم معها مثل عملية إنشاء عدة tab في الواجهة او صفحات النت بحيث كل tab يتم تنفيذه عندما يقوم المستخدم بالضغط عليه.وهكذا. tab تستخدم في php وا asp.net وتطبيقات الويندوز.
File >> new >> Fragment >> Blank Fragment
كيفية استخدامة fragments ؟
يتضمن هذا عددًا من الخطوات البسيطة لإنشاء الأجزاء.
بادئ ذي بدء ، حدد عدد الأجزاء التي تريد استخدامها في نشاط ما. على سبيل المثال ، دعنا نستخدم جزأين للتعامل مع الوضعين الأفقي والصوري للجهاز.
بعد ذلك ، بناءً على عدد الأجزاء ، قم بإنشاء فئات من شأنها أن تمدد فئة الأجزاء. فئة Fragment المذكورة أعلاه وظائف رد الاتصال المذكورة. يمكنك تجاوز أي من الوظائف بناءً على متطلباتك.
المقابلة لكل جزء ، سوف تحتاج إلى إنشاء ملفات تخطيط في ملف XML. سيكون لهذه الملفات تخطيط للأجزاء المحددة.
أخيرًا ، قم بتعديل ملف النشاط لتحديد المنطق الفعلي لاستبدال الأجزاء وفقًا لمتطلباتك.
أنواع التجزئة
في الأساس يتم تقسيم التجزئة إلى ثلاث مراحل كما هو موضح أدناه.
أجزاء الإطار الأحادي - تستخدم أجزاء الإطار الأحادي الأجهزة المحمولة باليد مثل الهواتف المحمولة ، وهنا يمكننا إظهار جزء واحد فقط كطريقة عرض.
التجزئة Fragment القائمة - تسمى Fragment التي لها عرض قائمة خاصة باسم قائمة Fragment
المعاملة fragment - باستخدام مع التجزئة . يمكننا نقل جزء واحد إلى جزء آخر.
في الأندرويد الـ Fragment هي جزء من الـ Activity و يمكننا القول بأنها Sub-Activity. هذه الـ Fragment هي تمثل جزء من واجهة المستخدم في الـ Activity الحالية. نستطيع مثلا دمج 3 من الـ Fragments داخل Activity. و لا ننسى أن دورة حياة ال Fragment تتأثر بدورة حياة الـ Activity.
برمجياً: الـ Fragment هي Java Class , أي أنني استطيع بناءها مثل ما يمكنني بناء أي Activity عادية.
إذن ما الحاجة إلى الـ Fragments:
- قبل استخدام الـ Fragments كنا نستطيع إظهار Activity واحدة فقط على الشاشة في الوقت الحالي للمستخدم, إذن كان من الصعب تقسيم الشاشة إلى عدد من الأجزاء كل جزء يؤدي مهمة معينة. و لكن مع الـ Fragments استطعنا عمل ذلك بتقسيم الـ Activity إلى عدد من الأجزاء Fragments و التحكم في كل جزء بشكل منفصل. بذلك كل Fragment لها events و Layouts خاصة بها مثل الـ Activity تمام
ما هي الإمكانيات المتاحة مع الـ Fragments:
- نستطيع إضافة و حذف الـ Fragment أثناء تشغيل الـ Activity.
- الـ Fragment لها Layout خاصة بها و دورة حياة مستقلة كذلكز
- الـ Fragment يمكن اعادة استخدامها في عدة Activities.
- يمكننا أيضاً دمج عدد من الـ Fragment داخل Activity واحدة.
- يمكن أن الـ Fragment تشكّل جزء من الـ Activity و ممكن تأخذ الـ Activity كاملة.
- ممكن إظهار عدد من الـ Fragment في نفس الوقت و ممكن عمل تبديل “swapping” بينها.
دوره حياه الجزء Fragment
التجزئة fragment الأندرويد لها دوره حياتها مشابهه جدا لنشاط الاندرويد. وهذا القسم يطلع علي مراحل مختلفه من دوره حياته.
فيما يلي قائمة بالطرق التي يمكنك تجاوزها في فئة الأجزاء -
onAttach () مثيل الجزء مرتبط بنسخة نشاط. الجزء والفعالية غير مهيأة بالكامل. عادةً ما تحصل في هذه الطريقة على مرجع للنشاط الذي يستخدم الجزء لمزيد من أعمال التهيئة.
onCreate () يستدعي النظام هذه الطريقة عند إنشاء الجزء. يجب عليك تهيئة المكونات الأساسية للجزء الذي تريد الاحتفاظ به عندما يتم إيقاف الجزء مؤقتًا أو إيقافه ، ثم استئنافه.
onCreateView () يقوم النظام باستدعاء رد الاتصال هذا عندما يحين الوقت لتتمكن الشظية من رسم واجهة المستخدم الخاصة بها لأول مرة. لرسم واجهة مستخدم للشظية الخاصة بك ، يجب عليك إرجاع مكون عرض من هذه الطريقة التي هي جذر تخطيط الجزء الخاص بك. يمكنك العودة خالية إذا كانت القطعة لا توفر واجهة مستخدم.
onCreateView () يقوم النظام باستدعاء رد الاتصال هذا عندما يحين الوقت لتتمكن الشظية من رسم واجهة المستخدم الخاصة بها لأول مرة. لرسم واجهة مستخدم للشظية الخاصة بك ، يجب عليك إرجاع مكون عرض من هذه الطريقة التي هي جذر تخطيط الجزء الخاص بك. يمكنك العودة خالية إذا كانت القطعة لا توفر واجهة مستخدم.
onActivityCreated () يسمى onActivityCreated () بعد أسلوب onCreateView () عند إنشاء نشاط المضيف. تم إنشاء مثيل للنشاط والجزء بالإضافة إلى عرض التسلسل الهرمي للنشاط. في هذه المرحلة ، يمكن الوصول إلى طريقة العرض باستخدام طريقة findViewById (). المثال. في هذه الطريقة ، يمكنك إنشاء كائنات تتطلب عنصر سياق
onStart () يتم استدعاء الأسلوب onStart () بمجرد ظهور الجزء.
onResume () يصبح جزء نشط.
onPause () يستدعي النظام هذه الطريقة كأول إشارة إلى أن المستخدم يغادر الجزء. هذا هو المكان الذي يجب أن ترتكب فيه أي تغييرات يجب أن تستمر بعد جلسة المستخدم الحالية.
سيتم إيقاف جزء onStop () عن طريق استدعاء onStop ()
سيتم تدمير طريقة العرض onDestroyView () جزء بعد استدعاء هذه الطريقة
تم استدعاء onDestroy () onDestroy () لإجراء التنظيف النهائي لحالة الجزء ولكن ليس مضمونًا ليتم استدعاؤه بواسطة نظام Android الأساسي.
تطبيق للـ Fragments و TabLayout
- أنشيء مشروع جديد في الأندرويد
File >> new >> Fragment >> Blank Fragment
- سنكرر الخطوة السابقة لإضافة الـ Fragment الثاني بإسم: “SundayFragment”
- سنقوم ببناء Adapter مخصصة نحدد بداخلها عدد الـ Tabs و الـ Fragments, أيضاً نعرف بداخلها عناوين الـ Tabs. لعمل ذلك نقوم بإنشاء كلاس جديدة و تسميتها FragmentAdapterSimple.jav
يتضمن هذا عددًا من الخطوات البسيطة لإنشاء الأجزاء.
بادئ ذي بدء ، حدد عدد الأجزاء التي تريد استخدامها في نشاط ما. على سبيل المثال ، دعنا نستخدم جزأين للتعامل مع الوضعين الأفقي والصوري للجهاز.
بعد ذلك ، بناءً على عدد الأجزاء ، قم بإنشاء فئات من شأنها أن تمدد فئة الأجزاء. فئة Fragment المذكورة أعلاه وظائف رد الاتصال المذكورة. يمكنك تجاوز أي من الوظائف بناءً على متطلباتك.
المقابلة لكل جزء ، سوف تحتاج إلى إنشاء ملفات تخطيط في ملف XML. سيكون لهذه الملفات تخطيط للأجزاء المحددة.
أخيرًا ، قم بتعديل ملف النشاط لتحديد المنطق الفعلي لاستبدال الأجزاء وفقًا لمتطلباتك.
في الأساس يتم تقسيم التجزئة إلى ثلاث مراحل كما هو موضح أدناه.
أجزاء الإطار الأحادي - تستخدم أجزاء الإطار الأحادي الأجهزة المحمولة باليد مثل الهواتف المحمولة ، وهنا يمكننا إظهار جزء واحد فقط كطريقة عرض.
التجزئة Fragment القائمة - تسمى Fragment التي لها عرض قائمة خاصة باسم قائمة Fragment
المعاملة fragment - باستخدام مع التجزئة . يمكننا نقل جزء واحد إلى جزء آخر.
نكتب بداخلها الكود التالي:
public class FragmentAdapterSimple extends FragmentPagerAdapter {
private Context mContext;
public FragmentAdapterSimple(Context context, FragmentManager fm)
{
super(fm);
mContext = context;
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new SaturdayFragment();
} else {
return new SundayFragment();
}
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
if (position == 0) {
return mContext.getString(R.string.string1);
} else {
return mContext.getString(R.string.string2);
}
}
}
- الآن بقي تهيئة الـ Main Activity , و الـ XML الخاصة بها:
في الـ activity-main.xml نقوم بإضافة أداة ViewPager للتنقل بين الـ Fragments, أيضاً أداة الـ TabLayout لكي نضع تبويب لكل Fragment.
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.khadijah.fragment2.MainActivity">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewpager"></android.support.v4.view.ViewPager>
</LinearLayout>
نلاحظ أننا وضعنا id لكل أداة لكي نستطيع التعامل معها من الـ MainActivity.java كالتالي
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set the content of the activity to use the activity_main.xml layout file
setContentView(R.layout.activity_main);
// Find the view pager that will allow the user to swipe between fragments
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
// Create an adapter that knows which fragment should be shown on each page
FragmentAdapterSimple adapter = new FragmentAdapterSimple(this, getSupportFragmentManager());
// Set the adapter onto the view pager
viewPager.setAdapter(adapter);
// Find the tab layout that shows the tabs
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
// Connect the tab layout with the view pager. This will
// 1. Update the tab layout when the view pager is swiped
// 2. Update the view pager when a tab is selected
// 3. Set the tab layout's tab names with the view pager's adapter's titles
// by calling onPageTitle()
tabLayout.setupWithViewPager(viewPager);
}
}
شرح لألية تنفيذ الكود:
- أولا عند تشغيل التطبيق يتم فتح الـ MainActivity و بداخلها الـ ViewPager layout و التي تسأل FragmentAdapterSimple.java (التي قمنا بإنشاءها و تعتبر هي مصدر البيانات للـ ViewPager) عن عدد الصفحات (Pages) ؟ و ستجد الإدابة من خلال الدالة:
@Override
public int getCount() {
return 2;
}
- بعدها الـ ViewPager تقوم بإظهار الـ Fragment رقم صفر و ذلك أيضاً من خلال الدالة التالية في الـ FragmentAdapterSimple.java.
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new SaturdayFragment();
} else {
return new SundayFragment();
}
}
- أخيرا عندما يقوم المستخدم بعمل مسح أو swipe للشاشة سيتم التنقل بين الـ Pages, و هذا أيضاً يعني أن ViewPager طلبت من الـ FragmentAdapterSimple.java الانتقال للـ Fragment التالية. و هكذا حسب الـ position الخاصة بالـ Fragment.
- و لا ننسى وظيفة الدالة التالية التي تحدد عناوين للـ Tabs الخاصة بكل Fragment:
public CharSequence getPageTitle(int position) {
if (position == 0) {
return mContext.getString(R.string.string1);
} else {
return mContext.getString(R.string.string2);
}
}
انواع التجزئة او التقسيم الواجهة الرسومية واجهة المستخدم في الأندرويد Types of Fragments
توجد ٣ انواع
- Single frame fragmen التقسيم ذات الإطار الفردي او الواحد: اضغط هنا لمشاهدة مثال على الإطار الفردي.
- List fragments التقسيم ذات القوائم
- Fragments transactionالتقسيم ذات التحويل .
التسميات: Android الاندرويد
<< الصفحة الرئيسية