التعامل مع كائنات البيانات المُلاحظة

الإعلانات

التعامل مع كائنات البيانات المُلاحظة

تشير الملاحظة إلى قدرة كائن ما، على إشعار الآخرين بالتغييرات في بياناتهم. تتيح لك مكتبة ربط البيانات، إمكانية إنشاء كائنات، أو حقول، أو مجموعات، يمكن ملاحظتها.

يمكن إستخدام أي كائن عادي قديم لربط البيانات، ولكن تعديل الكائن، لا يؤدي تلقائياً إلى تحديث واجهة المستخدم.

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

هناك ثلاثة أنواع مختلفة من الفئات التي يمكن ملاحظتها: الكائنات والحقول والمجموعات.

عند ربط إحدى كائنات البيانات هذه، التي يمكن ملاحظتها، إلى واجهة المستخدم، و خاصية تغييرات كائن البيانات، يتم تحديث واجهة المستخدم تلقائياً.

 

الحقول الملاحظة

بعض الأعمال مشتركة في إنشاء الفئات التي تقوم بتنفيذ واجهة ملحوظه، والتي لا يمكن أن تستحق الجهد إذا كانت فئاتك..

تحتوي على بعض الخصائص فقط. في هذه الحالة، يمكنك إستخدام فئة الملاحظة العامة والفئات الأولية المحددة التاليه لجعل الحقول ملحوظه:

  • ObservableBoolean
  • ObservableByte
  • ObservableChar
  • ObservableShort
  • ObservableInt
  • ObservableLong
  • ObservableFloat
  • ObservableDouble
  • ObservableParcelable

الحقول الملحوظه هي كائنات ملحوظة ذاتياً ولها حقل واحد. الإصدارات الأوليه تتجنب التعليب وعدم التعليب أثناء عمليات الوصول.

لإستخدام هذه الآلية، قم بإنشاء خاصية نهائية عامة public final في لغة برمجة الجافا أو خاصية للقراءة فقط في لغة الكوتلن، كما هو موضح في المثال التالي:

KOTLIN

class User {
    val firstName = ObservableField<String>()
    val lastName = ObservableField<String>()
    val age = ObservableInt()
}

 

JAVA

private static class User {
    public final ObservableField<String> firstName = new ObservableField<>();
    public final ObservableField<String> lastName = new ObservableField<>();
    public final ObservableInt age = new ObservableInt();
}

 

للوصول إلى قيمة الحقل، إستخدم دالتي الإسترجاع التعيين ()set و الضبط ()get ، كما يلي: 

KOTLIN

user.firstName = "Google"
val age = user.age

 

JAVA

user.firstName.set("Google");
int age = user.age.get();

 

ملاحظة: يتيح لك الإصدار 3.1 من أندرويد ستوديو والإصدارات الأعلى إستبدال الحقول الملحوظه بإستخدام كائنات البيانات المباشرة LiveData..

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

 

 

المجموعات الملحوظه

تستخدم بعض التطبيقات بنى حيويه لإستيعاب البيانات. تسمح المجموعات الملحوظه بالوصول إلى هذه البنى بإستخدام مفتاح.

تكون فئة ObservableArrayMap مفيدة عندما يكون المفتاح من نوع مرجع، مثل سلسله String، كما هو موضح في المثال التالي:

KOTLIN التعامل مع كائنات البيانات المُلاحظة التعامل مع كائنات البيانات المُلاحظة

ObservableArrayMap<String, Any>().apply {
    put("firstName", "Google")
    put("lastName", "Inc.")
    put("age", 17)
}

 

JAVA التعامل مع كائنات البيانات المُلاحظة التعامل مع كائنات البيانات المُلاحظة

ObservableArrayMap<String, Object> user = new ObservableArrayMap<>();
user.put("firstName", "Google");
user.put("lastName", "Inc.");
user.put("age", 17);

 

في المخطط، يمكن العثور على الخريطة بإستخدام مفاتيح السلسلة، على النحو التالي: 

تعتبر فئة ObservableArrayList مفيدة عندما يكون المفتاح عبارة عن عدد صحيح، كما يلي:

KOTLIN

ObservableArrayList<Any>().apply {
    add("Google")
    add("Inc.")
    add(17)
}

 

JAVA

ObservableArrayList<Object> user = new ObservableArrayList<>();
user.add("Google");
user.add("Inc.");
user.add(17);

 

 

في المخطط، يمكن الوصول إلى القائمة من خلال الفهارس، كما هو موضح في المثال التالي: 

<data>
    <import type="android.databinding.ObservableList"/>
    <import type="com.example.my.app.Fields"/>
    <variable name="user" type="ObservableList<Object>"/>
</data>
…
<TextView
    android:text='@{user[Fields.LAST_NAME]}'
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<TextView
    android:text='@{String.valueOf(1 + (Integer)user[Fields.AGE])}'
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

 

 

الكائنات الملحوظه


الفئة التي تنفذ واجهة ملحوظه تسمح بتسجيل المستمعين الذين يرغبون في أن يتم إشعارهم بتغييرات الخاصية على الكائن الملحوظ.

تحتوي الواجهة الملحوظة على آلية لإضافة المستمعين وإزالتهم، ولكن يجب أن تقرر متى يتم إرسال الإشعارات.

لتسهيل عملية التطوير، توفر مكتبة ربط البيانات فئة BaseObservable، التي تنفذ آلية تقوم بتسجيل المستمع.

تعتبر فئة البيانات التي تنفذ BaseObservable مسؤولة عن الإشعار عندما تتغير الخصائص. يتم ذلك عن طريق تعيين..

تعليق توضيحي قابل للربط  Bindable إلى دالة الجلب getter وإستدعاء دالة ()notifyPropertyChanged في دالة التعيين، كما هو موضح في المثال التالي:

KOTLIN

class User : BaseObservable() {

    @get:Bindable
    var firstName: String = ""
        set(value) {
            field = value
            notifyPropertyChanged(BR.firstName)
        }

    @get:Bindable
    var lastName: String = ""
        set(value) {
            field = value
            notifyPropertyChanged(BR.lastName)
        }
}

 

JAVA

private static class User extends BaseObservable {
    private String firstName;
    private String lastName;

    @Bindable
    public String getFirstName() {
        return this.firstName;
    }

    @Bindable
    public String getLastName() {
        return this.lastName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
        notifyPropertyChanged(BR.firstName);
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
        notifyPropertyChanged(BR.lastName);
    }
}

 

ينشئ ربط البيانات فئة تسمى BR، في حزمة الوحدة النمطية التي تحتوي على معرفات المصادر المستخدمة لربط البيانات.

ينشئ التعليق التوضيحي القابل للربط Bindable إدخالاً في ملف فئة BR أثناء التحويل البرمجي.

إذا كانت الفئة الأساسية لفئات البيانات، لا يمكن تغييرها، فيمكن تنفيذ واجهة ملحوظة بإستخدام كائن PropertyChangeRegistry لتسجيل وإشعار المستمعين بكفاءة.

 


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

الإعلانات

اترك رد