25 -اندرويد – Fragments: التواصل مع بقية ال Fragments

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

اندرويد : Fragments: التواصل مع بقية ال Fragments

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

سوف نتحدث في هذا الدرس عن آلية التواصل بين ال Fragments  مع الفعالية المستضيفة لها , وبين ال Fragments بين بعضهم البعض.

الدرس قيم جدا ويحوي رغم قصره على كم كبير من المعلومات المفيدة فيما يخص ال Fragments ارجو لكم الفائدة.

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

  1. تعريف واجهة Define an Interface
  2. تحقيق الواجهة ( اي كتابة الكود اللازم لها)Implement the Interface
  3. نقل رسالة إلى ال Fragment , Deliver a Message to a Fragment

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

ما إن تقوم بتعريف هذه ال fragments  القابلة لاعادة الاستخدام , حتى يصبح باستطاعتك ارفاقهم مع اي فعالية activity  وربطهم مع منطق التطبيق لتحقق واجهة المستخدم المركبة المطلوبة.

غالبا ما تحتاج إلى ان تتواصل وتتفاعل ال Fragments  مع بعضها البعض, على سبيل المثال لتغيير المحتوى اعتمادا على احداث المستخدم.

تتم كل اساليب التواصل بين Fragments-to-Fragment من خلال ال Activity  المرفقين بها.

ولا يتوجب ابدا ان تتواصل ال Fragments مع بعضها البعض بشكل مباشر.

تعريف واجهة Define an Interface

لكي نمكن ال fragments  من التواصل مع فعاليتها,بإمكاننا ان نعرف واجهة Interface  ضمن صف ال Fragment ونقوم بتحقيق implement هذا الصف ضمن الفعالية.

تلتقط ال Fragment تحقيق الواجهة الخاصة بها ضمن مرحلة استدعاء التابع onAttach() من دورة حياة ال fragment  , ومن ثم يصبح باستطاعتها استدعاء توابع الواجهة لكي تتواصل مع الفعالية.

فيما يلي مثال عن طريقة التواصل بين ال Fragment والفعالية Activity :

public class HeadlinesFragment extends ListFragment {
OnHeadlineSelectedListener mCallback;// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}@Override
public void onAttach(Activity activity) {
super.onAttach(activity);// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ ” must implement OnHeadlineSelectedListener”);
}
}…
}

الآن اصبح بإمكان ال Fragment نقل الرسائل إلى الفعالية عبر استدعاء التابع onArticleSelected()  (أو اية تواقع اخرى ضمن الواجهة) باستخدام مستنسخ mCallback الخاص بالواجهة  OnHeadlineSelectedListener.

على سبيل المثال, يتم استدعاء التابع التالي الموجود ضمن ال fragment  عندما ينقر المستخدم على عناصر القائمة.

يستخدم ال fragment  واجهة الاستدعاء لينقل الأحداث إلى الفعالية الأب.

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// Send the event to the host activity
mCallback.onArticleSelected(position);
}

تحقيق الواجهة Implement the Interface

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

على سبيل المثال, تقوم الفعالية التالية بتحقيق الواجهة المعرفة في ال fragment  ضمن المثال السابق.

 

public static class MainActivity extends Activity
implements HeadlinesFragment.OnHeadlineSelectedListener{
…public void onArticleSelected(int position) {
// The user selected the headline of an article from the HeadlinesFragment
// Do something here to display that article
}
}

توصيل رسالة إلى ال Fragment , Deliver a Message to a Fragment

بإمكان الفعالية المستضيفة لل fragment ان تقوم بتوصيل رسائل إلى ال fragment عبر التقاط مستنسخ ال Fragment باستخدام التابع findFragmentById(), ومن ثم تقوم بشكل مباشر باستدعاء التوابع العامة لهذا ال Fragment.

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

public static class MainActivity extends Activity
implements HeadlinesFragment.OnHeadlineSelectedListener{

public void onArticleSelected(int position) {
// The user selected the headline of an article from the HeadlinesFragment
// Do something here to display that article

ArticleFragment articleFrag = (ArticleFragment)
getSupportFragmentManager().findFragmentById(R.id.article_fragment);

if (articleFrag != null) {
// If article frag is available, we’re in two-pane layout…

// Call a method in the ArticleFragment to update its content
articleFrag.updateArticleView(position);
} else {
// Otherwise, we’re in the one-pane layout and must swap frags…

// Create fragment and give it an argument for the selected article
ArticleFragment newFragment = new ArticleFragment();
Bundle args = new Bundle();
args.putInt(ArticleFragment.ARG_POSITION, position);
newFragment.setArguments(args);

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack so the user can navigate back
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();
}
}
}

وعند هذه النقطة نكون قد انتهينا من شرح المثال البرمجي الذي استمر معنا على ما يقارب الثلاث حلقات.

وسنتوقف عند هذا القدر مع المعلومات حول ال Fragment  لنتحول إلى موضوع اخر مهم ألا وهو ” تخزين المعطيات” Saving Data
وإلى ذلك الحين استودعكم الله والسلام عليكم ورحمة  لله وبركاته.

المصطلح الترجمة

implement

تحقيق , اي كتابة الكود البرمجي اللازم

Interface

واجهة

Instance

مستنسخ

modular component

مكون وحدوي – ان جاز التعبير-

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 مدونون معجبون بهذه: