إنشاء فئات الربط

الإعلانات

إنشاء فئات الربط

تقوم مكتبة ربط البيانات بإنشاء فئات ربط يتم إستخدامها للوصول إلى متغيرات المخطط وطرق العرض الخاصة به.

تعرض هذه الصفحة كيفية إنشاء فئات الربط المنشئه وتخصيصها.

فئة الربط المنشئه تقوم بربط متغيرات المخطط مع طرق العرض بداخل المخطط. يمكن تخصيص أسم وحزمة لفئة الربط.

ترث كافة فئات الربط المنشئه من فئة ViewDataBinding.

يتم إنشاء فئة ربط لكل ملف مخطط. بشكلٍ إفتراضي، أسم الفئة يستند إلى أسم ملف المخطط، ويقوم بتحويله إلى حالة باسكال وإضافة لاحقة ربط إليه.

أسم ملف المخطط أعلاه هو activity_main.xml بحيث تكون الفئة المنُشئه المطابقة هي ActivityMainBinding.

تستوعب هذه الفئة، كافة الإرتباطات، من خصائص المخطط (مثال، متغير المستخدم user) إلى طرق العرض، الخاصة بالمخطط وتعرف كيفية تعيين قيم لتعبيرات الربط.

 

 

إنشاء كائن ربط


يجب إنشاء كائن الربط سريعاً، بعد تضخيم المخطط، لضمان عدم تعديل التسلسل الهرمي لطرق العرض، قبل أن يتم ربطه مع طرق العرض، ذات التعبيرات، بداخل المخطط.

الطريقة الأكثر شيوعاً، لربط الكائن بمخطط هي، بإستخدام الدوال الثابتة، في فئة الربط. يمكنك تضخيم التسلسل الهرمي لطرق العرض وربط الكائن بها..

بإستخدام دالة التضخيم ()inflate الخاصة بفئة الربط، كما هو موضح في المثال التالي:

KOTLIN

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val binding: MyLayoutBinding = MyLayoutBinding.inflate(layoutInflater)
}

 

JAVA

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyLayoutBinding binding = MyLayoutBinding.inflate(getLayoutInflater());
}

 

هناك نسخة بديلة من دالة التضخيم ()inflate تأخذ كائن ViewGroup بالإضافة إلى كائن LayoutInflater ، كما هو موضح في المثال التالي:

KOTLIN

val binding: MyLayoutBinding = MyLayoutBinding.inflate(getLayoutInflater(), viewGroup, false)

 

JAVA

MyLayoutBinding binding = MyLayoutBinding.inflate(getLayoutInflater(), viewGroup, false);

 

إذا تم تضخيم المخطط بإستخدام آلية مختلفة، فيمكن ربطه بشكلٍ منفصل، على النحو التالي: 

KOTLIN

val binding: MyLayoutBinding = MyLayoutBinding.bind(viewRoot)

 

JAVA

MyLayoutBinding binding = MyLayoutBinding.bind(viewRoot);

 

في بعض الأحيان لا يمكن معرفة نوع الربط مقدماً. في مثل هذه الحالات، يمكن إنشاء الربط بإستخدام فئة DataBindingUtil، كما هو موضح في مقتطف الكود التالي:

KOTLIN

val viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent)
val binding: ViewDataBinding? = DataBindingUtil.bind(viewRoot)

 

JAVA إنشاء فئات الربط إنشاء فئات الربط إنشاء فئات الربط 

View viewRoot = LayoutInflater.from(this).inflate(layoutId, parent, attachToParent);
ViewDataBinding binding = DataBindingUtil.bind(viewRoot);

 

إذا كنت تستخدم عناصر ربط البيانات بداخل الشظيه أو ListView أو RecyclerView، فقد تفضل إستخدام دوال التضخيم ()inflate ..

لفئات الربط أو فئة DataBindingUtil، كما هو موضح في الكود التالي:

KOTLIN

val listItemBinding = ListItemBinding.inflate(layoutInflater, viewGroup, false)
// or
val listItemBinding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false)

 

JAVA إنشاء فئات الربط إنشاء فئات الربط إنشاء فئات الربط 

ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
// or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);

 

 

 

طرق العرض مع المعرفات

تقوم مكتبة ربط البيانات بإنشاء حقل غير قابل للتغيير، في فئة الربط، لكل طريقة عرض، تحتوي على معرف في المخطط.

على سبيل المثال، تقوم مكتبة ربط البيانات، بإنشاء حقول الاسم الأول firstName واسم العائلة lastName من النوع TextView من المخطط التالي:

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

يمكن أن تكون هذه الآلية أسرع من إستدعاء الداله ()findViewById لكل طريقة عرض في المخطط.

لا تعد المعرفات ضرورية كما هي بدون ربط البيانات، ولكن لا تزال هناك بعض الحالات التي لا يزال فيها الوصول إلى طرق العرض من الكود ضرورياً.

 

 

المتغيرات


تقوم مكتبة ربط البيانات، بإنشاء دوال إسترجاع، لكل متغير تم الإعلان عنه في المخطط.

على سبيل المثال، ينشئ المخطط التالي دوال التعيين setter و الجلب getter في فئة الربط لمتغيرات المستخدم user، الصور image، و الملاحظة note:

<data>
   <import type="android.graphics.drawable.Drawable"/>
   <variable name="user" type="com.example.User"/>
   <variable name="image" type="Drawable"/>
   <variable name="note" type="String"/>
</data>

 

 

ViewStubs


بخلاف طرق العرض العادية، تبدأ كائنات ViewStub في الظهور كطرق عرض غير مرئية. سواء تم تصميمها لتكون مرئية، أو يُطلب منها صراحة أن تتضخم…

فإنها تستبدل نفسها في المخطط عن طريق تضخيم مخطط آخر.

بسبب إختفاء ViewStub بشكلٍ أساسي من التسلسل الهرمي لطرق العرض، يجب أيضاً أن يختفي العرض..

الموجود في كائن الربط، للسماح للمطالبة به، من قبل مجموعة مهملة garbage.

لأن طرق العرض نهائية، يأخذ كائن ViewStubProxy مكان ViewStub في فئة الربط المُنشئه، مما يتيح لك الوصول إلى ViewStub ..

عندما تكون موجودة، والوصول أيضاً إلى التسلسل الهرمي، لطرق العرض المضخمه عندما يتم تضخيم ViewStub.

عند تضخيم مخطط آخر، يجب إنشاء ربط للمخطط الجديد. لذا، يجب أن يستمع ViewStubProxy إلى ViewStub OnInflateListener ..

ويقوم بإنشاء الربط عند الحاجة. لأنه يمكن فقط، أن يتواجد مستمع واحد في وقت معين، يتيح لك ViewStubProxy تعيين OnInflateListener ، والذي يُستدعى بعد إنشاء الربط.

 

 

الربط الفوري


عندما يتغير كائن متغير أو ملحوظ، من المقرر أن يتغير الربط قبل الإطار التالي.

مع ذلك هناك أوقات، يتوجب فيها تنفيذ الربط فوراً. لفرض التنفيذ، إستخدم الداله ()executePendingBindings .

 

الربط المتقدم


المتغيرات الحيويه

في بعض الأحيان، تكون فئة الربط المحددة غير معروفة. مثال، RecyclerView.Adapter تعمل على مخططات عشوائيه، لا تعرف فئة الربط المحددة.

لا يزال يتوجب تعيين قيمة الربط، أثناء إستدعاء الدالة ()onBindViewHolder .

في المثال التالي، كافة المخططات التي تربطها RecyclerView لتحتوي على متغير عنصر item.

يحتوي الكائن BindingHolder على دالة ()getBinding  تقوم بإرجاع الفئة الأساسية ViewDataBinding.

KOTLIN

override fun onBindViewHolder(holder: BindingHolder, position: Int) {
    item: T = mItems.get(position)
    holder.binding.setVariable(BR.item, item);
    holder.binding.executePendingBindings();
}

 

JAVA

public void onBindViewHolder(BindingHolder holder, int position) {
    final T item = mItems.get(position);
    holder.getBinding().setVariable(BR.item, item);
    holder.getBinding().executePendingBindings();
}

 

 

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

في المثال أعلاه، تقوم المكتبة تلقائياً بإنشاء المتغير BR.item.

 

تسلسل الخلفية


يمكنك تغيير نموذج البيانات في تسلسل الخلفية، طالما أنه ليس مجموعة. ربط البيانات يقوم بتحديد موقع كل متغير/حقل أثناء التقييم لتجنب أي مشكلات في التزامن.

 

 

أسماء فئة ربط مخصصة


بشكلٍ إفتراضي، يتم إنشاء فئة ربط بناءً على أسم ملف المخطط، يبدء بحرف كبير، يزيل الشرطات السفلية (_)، يقوم بتكبير الحرف التالي، ويقوم بربط لاحقة الكلمة.

يتم وضع الفئة في حزمة ربط البيانات، تحت حزمة الوحدة النمطية. مثال، ينشئ ملف المخطط contact_item.xml الفئة ContactItemBinding.

إذا كانت حزمة الوحدة النمطية هي com.example.my.app، فسيتم وضع فئة الربط في الحزمة com.example.my.app.databinding.

يمكن إعادة تسمية فئات الربط، أو وضعها في حزم مختلفة، عن طريق ضبط سمة الفئة class، لعنصر البيانات data.

مثال، ينشئ المخطط التالي فئة الربط ContactItem في حزمة ربط البيانات databinding في الوحدة النمطية الحالية:

<data class="ContactItem">
    …
</data>

 

يمكنك إنشاء فئة الربط، في حزمة مختلفة، عن طريق بدء أسم الفئة بنقطة. المثال التالي ينشئ فئة الربط، في حزمة الوحدة النمطية:

<data class=".ContactItem">
    …
</data>

 

يمكنك أيضاً إستخدام اسم الحزمة الكامل، حيث تريد إنشاء فئة الربط. المثال التالي يقوم بإنشاء فئة الربط ContactItem في الحزمة com.example:

<data class="com.example.ContactItem">
    …
</data>

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

اترك رد