Site icon C1CTech

Android working with observable data objects using DataBinding

<p class&equals;"p1"><b><span style&equals;"color&colon; &num;0000ff&semi;">Observable Data Object<&sol;span> <&sol;b>refers to the capability of an object to notify others&lpar;listeners&rpar; about the changes in its data&period; The data binding library allows us to make objects&comma; fields&comma; or collections observable&period;<&sol;p>&NewLine;<p class&equals;"p1">Any plain-old object can be used for data binding&comma; but modifying the object doesn&&num;8217&semi;t automatically cause the UI to update&period;<&sol;p>&NewLine;<p class&equals;"p1"><strong><span style&equals;"color&colon; &num;008000&semi;">Data binding <&sol;span><&sol;strong>can be used to give your data objects the ability to notify other objects&comma; known as listeners&comma; when its data changes&period; When one of these observable data objects &lpar;objects&comma; fields&comma; collections&rpar; is bound to the UI and a property of the data object changes&comma; the UI is updated automatically&period;<&sol;p>&NewLine;<p class&equals;"p1">In the previous <span style&equals;"color&colon; &num;0000ff&semi;"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;android-data-binding-in-recyclerview&sol;"><span class&equals;"s1"><b>article<&sol;b><&sol;span><&sol;a><&sol;span>&comma; I have explained about how to work with data binding with the help of a demo&period; In this article&comma; we will talk about how to make objects&comma; fields&comma; or collections observable using Data Binding&period; If you are new to DataBinding then read this <span style&equals;"color&colon; &num;0000ff&semi;"><strong><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;android-jetpack-data-binding&sol;">article<&sol;a><&sol;strong>&period;<&sol;span><&sol;p>&NewLine;<p><amp-youtube layout&equals;"responsive" width&equals;"1200" height&equals;"900" data-videoid&equals;"rruP6Wa2hq0" title&equals;"Android Working with Observable Data Objects using DataBinding"><a placeholder href&equals;"https&colon;&sol;&sol;youtu&period;be&sol;rruP6Wa2hq0"><img src&equals;"https&colon;&sol;&sol;i&period;ytimg&period;com&sol;vi&sol;rruP6Wa2hq0&sol;hqdefault&period;jpg" layout&equals;"fill" object-fit&equals;"cover" alt&equals;"Android Working with Observable Data Objects using DataBinding"><&sol;a><&sol;amp-youtube><&sol;p>&NewLine;<p class&equals;"p1">Let’s understand each of these observables&lpar;objects&comma; fields&comma; or collections&rpar; with the help of example&period;<&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Observable Fields<&sol;strong><&sol;span><&sol;h3>&NewLine;<p class&equals;"p1">If your object class has fewer properties to be updated or if you don’t want to observe every field in the object&comma; you can use <span style&equals;"color&colon; &num;008000&semi;"><b>ObservableFields<&sol;b><&sol;span> to update the UI&period;<&sol;p>&NewLine;<p class&equals;"p1">You can declare the variable as ObservableField and when the new data is set&comma; the UI will be updated&period;<&sol;p>&NewLine;<p class&equals;"p1">You can use the following primitive-specific classes to make fields observable&colon;<&sol;p>&NewLine;<ul class&equals;"ul1">&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableBoolean"><span class&equals;"s2">ObservableBoolean<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableByte"><span class&equals;"s2">ObservableByte<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableChar"><span class&equals;"s2">ObservableChar<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableShort"><span class&equals;"s2">ObservableShort<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableInt"><span class&equals;"s2">ObservableInt<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableLong"><span class&equals;"s2">ObservableLong<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableFloat"><span class&equals;"s2">ObservableFloat<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableDouble"><span class&equals;"s2">ObservableDouble<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<li class&equals;"li2"><span style&equals;"color&colon; &num;0000ff&semi;"><strong><span class&equals;"s1"><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;reference&sol;android&sol;databinding&sol;ObservableParcelable"><span class&equals;"s2">ObservableParcelable<&sol;span><&sol;a><&sol;span><&sol;strong><&sol;span><&sol;li>&NewLine;<&sol;ul>&NewLine;<p>Let&&num;8217&semi;s understand with an example how to make fields observable&period;<&sol;p>&NewLine;<p><strong>1<&sol;strong> &period;I have created a class named <span style&equals;"color&colon; &num;008000&semi;"><strong>User&period; <&sol;strong><span style&equals;"color&colon; &num;000000&semi;">To make the fields firstName&comma;lastName and age observable modify it as shown below&colon;<&sol;span><&sol;span><&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">User&period;java<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>package com&period;example&period;databindingexample&semi;&NewLine;&NewLine;import androidx&period;databinding&period;ObservableField&semi;&NewLine;import androidx&period;databinding&period;ObservableInt&semi;&NewLine;&NewLine;public class User&lbrace;&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>public final ObservableField&lt&semi;String&gt&semi; firstName &equals; new ObservableField&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine; public final ObservableField&lt&semi;String&gt&semi; lastName &equals; new ObservableField&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine;&NewLine; public final ObservableInt age &equals; new ObservableInt&lpar;&rpar;&semi;&NewLine;<&sol;strong><&sol;span>&NewLine;&rcub;<&sol;pre>&NewLine;<p class&equals;"p1"><strong>2<&sol;strong> &period;Open MainActivity&period;java&period; To test this&lpar;observable field&rpar;&comma; I am updating user data by assigning a new value to the fields on button click&period; You can see the UI updated on button click right away&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">MainActivity&period;java<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>package com&period;example&period;databindingexample&semi;&NewLine;&NewLine;import android&period;os&period;Bundle&semi;&NewLine;import android&period;view&period;View&semi;&NewLine;import android&period;widget&period;EditText&semi;&NewLine;import android&period;widget&period;Toast&semi;&NewLine;import com&period;example&period;databindingexample&period;databinding&period;ActivityMainBinding&semi;&NewLine;import androidx&period;appcompat&period;app&period;AppCompatActivity&semi;&NewLine;import androidx&period;databinding&period;DataBindingUtil&semi;&NewLine;&NewLine;public class MainActivity extends AppCompatActivity &lbrace;&NewLine;&NewLine; ActivityMainBinding binding&semi;&NewLine; ClickHandler handler&semi;&NewLine; User user&semi;&NewLine;&NewLine; &commat;Override&NewLine; protected void onCreate&lpar;Bundle savedInstanceState&rpar; &lbrace;&NewLine; super&period;onCreate&lpar;savedInstanceState&rpar;&semi;&NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine; binding &equals; DataBindingUtil&period;setContentView&lpar;this&comma; R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong><span style&equals;"color&colon; &num;008000&semi;">user &equals; new User&lpar;&rpar;&semi;<&sol;span>&NewLine; user&period;firstName&period;set&lpar;"Arun"&rpar;&semi;&NewLine; user&period;lastName&period;set&lpar;"Chandravanshi"&rpar;&semi;&NewLine; user&period;age&period;set&lpar;28&rpar;&semi;<&sol;strong><&sol;span>&NewLine; binding&period;setUser&lpar;user&rpar;&semi;&NewLine;&NewLine; handler &equals; new ClickHandler&lpar;binding&period;edtFname&comma; binding&period;edtLname&comma; binding&period;edtAge&rpar;&semi;&NewLine; binding&period;setHandler&lpar;handler&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; public class ClickHandler &lbrace;&NewLine;&NewLine; EditText edtFirstName&comma; edtLastName&comma; edtAge&semi;&NewLine;&NewLine; public ClickHandler&lpar;EditText edtFirstName&comma; EditText edtLastName&comma; EditText edtAge&rpar; &lbrace;&NewLine; this&period;edtFirstName &equals; edtFirstName&semi;&NewLine; this&period;edtLastName &equals; edtLastName&semi;&NewLine; this&period;edtAge &equals; edtAge&semi;&NewLine; &rcub;&NewLine;&NewLine; public void <span style&equals;"color&colon; &num;000000&semi;">updateUser<&sol;span>&lpar;View view&rpar; &lbrace;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">user&period;firstName&period;set&lpar;edtFirstName&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&semi;&NewLine; user&period;lastName&period;set&lpar;edtLastName&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&semi;&NewLine; user&period;age&period;set&lpar;Integer&period;parseInt&lpar;edtAge&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&rpar;&semi;<&sol;span><&sol;strong>&NewLine;&NewLine; Toast&period;makeText&lpar;getApplicationContext&lpar;&rpar;&comma; "Name&colon; " &plus; <strong><span style&equals;"color&colon; &num;008000&semi;">user&period;firstName&period;get&lpar;&rpar;<&sol;span><&sol;strong> &plus; " " &plus; <strong><span style&equals;"color&colon; &num;008000&semi;">user&period;lastName&period;get&lpar;&rpar;<&sol;span><&sol;strong> &plus;&NewLine; "&bsol;nAge&colon; " &plus; <strong><span style&equals;"color&colon; &num;008000&semi;">user&period;age&period;get&lpar;&rpar;<&sol;span><&sol;strong>&comma; Toast&period;LENGTH&lowbar;LONG&rpar;&period;show&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; &rcub;&NewLine;&rcub;<&sol;pre>&NewLine;<p>To set a value inside the field use the <strong><span class&equals;"s1" style&equals;"color&colon; &num;008000&semi;">set&lpar;&rpar; <&sol;span><&sol;strong>and to get the value use <span class&equals;"s1"><strong><span style&equals;"color&colon; &num;008000&semi;">get&lpar;&rpar;<&sol;span><&sol;strong> of the <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableField<&sol;span><&sol;strong> class<&sol;span>&period;<&sol;p>&NewLine;<p>The ObservableField class consists of set&lpar;&rpar; which internally calls <span style&equals;"color&colon; &num;0000ff&semi;"><strong>notifyChange&lpar;&rpar;<&sol;strong><&sol;span> &lpar;notifies listeners that the value of this property has changed and now the UI will be updated with the new values&rpar;&period;<&sol;p>&NewLine;<p><strong>3<&sol;strong> &period;The activity&period;xml file consists of a button on click of which we are updating fields&lpar;firstName&comma; lastName&comma; age&rpar; with the EditText values&period;<&sol;p>&NewLine;<p>To access the observable fields inside views we have to write&colon;<&sol;p>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;user&period;firstName&rcub;"<&sol;span><&sol;strong><&sol;pre>&NewLine;<p>Where <strong><span style&equals;"color&colon; &num;008000&semi;">firstName<&sol;span><&sol;strong> is the User object property name&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">activity&lowbar;main&period;xml<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&NewLine;&lt&semi;layout xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine; xmlns&colon;app&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res-auto"&NewLine; xmlns&colon;tools&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;tools"&gt&semi;&NewLine;&NewLine; &lt&semi;data&gt&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;"> &lt&semi;variable&NewLine; name&equals;"user"&NewLine; type&equals;"com&period;example&period;databindingexample&period;User" &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;variable&NewLine; name&equals;"handler"&NewLine; type&equals;"com&period;example&period;databindingexample&period;MainActivity&period;ClickHandler" &sol;&gt&semi;<&sol;span><&sol;strong>&NewLine;&NewLine; &lt&semi;&sol;data&gt&semi;&NewLine;&NewLine; &lt&semi;LinearLayout&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;margin&equals;"30dp"&NewLine; android&colon;orientation&equals;"vertical"&NewLine; tools&colon;context&equals;"&period;MainActivity"&gt&semi;&NewLine;&NewLine; &lt&semi;LinearLayout&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;orientation&equals;"vertical"&NewLine; android&colon;padding&equals;"15dp"&NewLine; android&colon;background&equals;"&commat;drawable&sol;background"&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;firstName"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;textSize&equals;"20sp"&NewLine; android&colon;layout&lowbar;marginTop&equals;"10dp"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;user&period;firstName&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&sol;&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;lastName"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"10dp"&NewLine; android&colon;textSize&equals;"20sp"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;user&period;lastName&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;age"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;textSize&equals;"20sp"&NewLine; android&colon;layout&lowbar;marginTop&equals;"10dp"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;String&period;valueOf&lpar;user&period;age&rpar;&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&sol;&gt&semi;&NewLine;&NewLine; &lt&semi;&sol;LinearLayout&gt&semi;&NewLine;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;fname"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"40dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter First Name"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;lname"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter Last Name"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;age"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter Age"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;Button&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;btn&lowbar;update"&NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;onClick&equals;"&commat;&lbrace;handler&colon;&colon;updateUser&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;layout&lowbar;gravity&equals;"center"&NewLine; android&colon;textSize&equals;"15sp"&NewLine; android&colon;background&equals;"&commat;drawable&sol;background"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;padding&equals;"18dp"&NewLine; android&colon;text&equals;"UPDATE USER"&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&NewLine; &sol;&gt&semi;&NewLine; &lt&semi;&sol;LinearLayout&gt&semi;&NewLine;&NewLine;&lt&semi;&sol;layout&gt&semi;<&sol;pre>&NewLine;<p class&equals;"p1">When you run the code It will look like this&colon;<&sol;p>&NewLine;<p><img class&equals;"alignnone wp-image-1588" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2020&sol;02&sol;Screenshot&lowbar;1582537116&period;png" alt&equals;"Screenshot&lowbar;1582537116" width&equals;"328" height&equals;"583" &sol;>   <img class&equals;"alignnone wp-image-1589" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2020&sol;02&sol;Screenshot&lowbar;1582537370&period;png" alt&equals;"Screenshot&lowbar;1582537370" width&equals;"328" height&equals;"583" &sol;><&sol;p>&NewLine;<h3><&sol;h3>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Observable Collections<&sol;strong><&sol;span><&sol;h3>&NewLine;<p>A Collection is a group of individual objects represented as a single unit&period; DataBinding provides two Observable Collection classes&colon;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">ObservableArrayList<&sol;span><&sol;strong>&colon; class which extends <strong><span style&equals;"color&colon; &num;008000&semi;">ArrayList<&sol;span><&sol;strong>&lt&semi;&gt&semi; and is useful when the key is an integer&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">ObservableArrayMap<&sol;span><&sol;strong>&colon; class which extends <strong><span style&equals;"color&colon; &num;008000&semi;">ArrayMap<&sol;span><&sol;strong>&lt&semi;K&comma; V&gt&semi; and is useful when the key is a reference type&comma; such as <strong><span class&equals;"s1" style&equals;"color&colon; &num;008000&semi;">String<&sol;span><&sol;strong>&comma;<&sol;p>&NewLine;<p>Let&&num;8217&semi;s understand with an example how to make Collections observable&period;<&sol;p>&NewLine;<h4><span style&equals;"color&colon; &num;000080&semi;"><strong>ObservableArrayList<&sol;strong><&sol;span><&sol;h4>&NewLine;<p><strong>1<&sol;strong> &period;Inside MainActivity&period;java&comma; I have created an <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableArrayList<&sol;span><&sol;strong> named <strong><span style&equals;"color&colon; &num;008000&semi;">list<&sol;span><&sol;strong> which holds String data&period; To test this&lpar; ObservableArrayList&rpar;&comma; I am updating list by setting new values at particular keys on button click&period; You can see the UI updated on button click right away&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">MainActivity&period;java<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>package com&period;example&period;databindingexample&semi;&NewLine;&NewLine;import android&period;os&period;Bundle&semi;&NewLine;import android&period;view&period;View&semi;&NewLine;import android&period;widget&period;EditText&semi;&NewLine;import com&period;example&period;databindingexample&period;databinding&period;ActivityMainBinding&semi;&NewLine;import androidx&period;appcompat&period;app&period;AppCompatActivity&semi;&NewLine;import androidx&period;databinding&period;DataBindingUtil&semi;&NewLine;import androidx&period;databinding&period;ObservableArrayList&semi;&NewLine;&NewLine;public class MainActivity extends AppCompatActivity &lbrace;&NewLine;&NewLine; ActivityMainBinding binding&semi;&NewLine; ClickHandler handler&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableArrayList&lt&semi;String&gt&semi; list&semi;<&sol;span><&sol;strong>&NewLine;&NewLine; &commat;Override&NewLine; protected void onCreate&lpar;Bundle savedInstanceState&rpar; &lbrace;&NewLine; super&period;onCreate&lpar;savedInstanceState&rpar;&semi;&NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine; binding &equals; DataBindingUtil&period;setContentView&lpar;this&comma; R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>list &equals; new ObservableArrayList&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine; list&period;add&lpar;"Arun"&rpar;&semi;&NewLine; list&period;add&lpar;"Chandravanshi"&rpar;&semi;&NewLine; binding&period;setUserlist&lpar;list&rpar;&semi;<&sol;strong><&sol;span>&NewLine;&NewLine; handler &equals; new ClickHandler&lpar;binding&period;edtFname&comma; binding&period;edtLname&rpar;&semi;&NewLine; binding&period;setHandler&lpar;handler&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; public class ClickHandler &lbrace;&NewLine;&NewLine; EditText edtFirstName&comma; edtLastName&semi;&NewLine;&NewLine; public ClickHandler&lpar;EditText edtFirstName&comma; EditText edtLastName&rpar; &lbrace;&NewLine; this&period;edtFirstName &equals; edtFirstName&semi;&NewLine; this&period;edtLastName &equals; edtLastName&semi;&NewLine; &rcub;&NewLine;&NewLine; public void updateName&lpar;View view&rpar; &lbrace;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">list&period;add&lpar;0&comma; edtFirstName&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&semi;&NewLine; list&period;add&lpar;1&comma; edtLastName&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&semi;&NewLine;<&sol;span><&sol;strong>&NewLine; &rcub;&NewLine; &rcub;&NewLine;&rcub;<&sol;pre>&NewLine;<p>The ObservableArrayList&lt&semi;&gt&semi; class consists of <strong><span style&equals;"color&colon; &num;008000&semi;">add&lpar;&rpar;<&sol;span><&sol;strong> which internally calls <span style&equals;"color&colon; &num;008000&semi;"><strong><span style&equals;"color&colon; &num;0000ff&semi;">notifyAdd&lpar;&rpar;<&sol;span>&period;<&sol;strong><&sol;span> <strong><span style&equals;"color&colon; &num;008000&semi;">notifyAdd<&sol;span><&sol;strong> method causes the UI to be updated with the new value&period;<&sol;p>&NewLine;<p><strong>2<&sol;strong> &period;In activity&lowbar;main&period;xml inside <strong><span style&equals;"color&colon; &num;008000&semi;">&lt&semi;data&gt&semi;<&sol;span><&sol;strong> tag  we will define a variable named <span style&equals;"color&colon; &num;008000&semi;"><strong>userlist<&sol;strong><&sol;span> pointing to <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableArrayList<&sol;span><&sol;strong> class object&period;<&sol;p>&NewLine;<p>To access list data inside views we have to write like this&colon;<&sol;p>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;userlist&lbrack;0&rsqb;&rcub;"<&sol;span><&sol;strong><&sol;pre>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">activity&lowbar;main&period;xml<&sol;span><&sol;strong><&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;98&period;1 -->&NewLine;<div class&equals;"quads-location quads-ad2" id&equals;"quads-ad2" style&equals;"float&colon;none&semi;margin&colon;0px&semi;">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&NewLine;&lt&semi;layout xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine; xmlns&colon;app&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res-auto"&NewLine; xmlns&colon;tools&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;tools"&gt&semi;&NewLine; &NewLine; &lt&semi;data&gt&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;"> &lt&semi;import type&equals;"androidx&period;databinding&period;ObservableArrayList"&sol;&gt&semi;&NewLine;&NewLine; &lt&semi;variable&NewLine; name&equals;"userlist"&NewLine; type&equals;"ObservableArrayList&amp&semi;lt&semi;String&gt&semi;" &sol;&gt&semi;&NewLine;<&sol;span><&sol;strong>&NewLine; &lt&semi;variable&NewLine; name&equals;"handler"&NewLine; type&equals;"com&period;example&period;databindingexample&period;MainActivity&period;ClickHandler" &sol;&gt&semi;&NewLine; &lt&semi;&sol;data&gt&semi;&NewLine;&NewLine; &lt&semi;LinearLayout&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;margin&equals;"30dp"&NewLine; android&colon;orientation&equals;"vertical"&NewLine; tools&colon;context&equals;"&period;MainActivity"&gt&semi;&NewLine;&NewLine; &lt&semi;LinearLayout&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;orientation&equals;"vertical"&NewLine; android&colon;padding&equals;"35dp"&NewLine; android&colon;background&equals;"&commat;drawable&sol;background"&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;firstName"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;textSize&equals;"30sp"&NewLine; android&colon;layout&lowbar;marginTop&equals;"10dp"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;userlist&lbrack;0&rsqb;&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&sol;&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;lastName"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;textSize&equals;"30sp"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;userlist&lbrack;1&rsqb;&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&NewLine; &sol;&gt&semi;&NewLine; &lt&semi;&sol;LinearLayout&gt&semi;&NewLine;&NewLine;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;fname"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"60dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter First Name"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;lname"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter Last Name"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;Button&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;btn&lowbar;update"&NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;onClick&equals;"&commat;&lbrace;handler&colon;&colon;updateName&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;layout&lowbar;gravity&equals;"center"&NewLine; android&colon;textSize&equals;"15sp"&NewLine; android&colon;background&equals;"&commat;drawable&sol;background"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;padding&equals;"18dp"&NewLine; android&colon;text&equals;"UPDATE NAME"&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&NewLine; &sol;&gt&semi;&NewLine; &lt&semi;&sol;LinearLayout&gt&semi;&NewLine;&NewLine;&lt&semi;&sol;layout&gt&semi;<&sol;pre>&NewLine;<h4><span style&equals;"color&colon; &num;000080&semi;"><strong>ObservableArrayMap<&sol;strong><&sol;span><&sol;h4>&NewLine;<p><strong>1<&sol;strong> &period;Inside MainActivity&period;java&comma; I have created an <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableArrayMap<&sol;span><&sol;strong> named <strong><span style&equals;"color&colon; &num;008000&semi;">list<&sol;span><&sol;strong> with key of type <span style&equals;"color&colon; &num;008000&semi;"><strong>String<&sol;strong><&sol;span> and which holds <strong><span style&equals;"color&colon; &num;008000&semi;">String<&sol;span><&sol;strong> data&period; To test this&lpar; ObservableArrayMap&rpar;&comma; I am updating list by setting new values at particular keys on button click&period; You can see the UI updated on button click right away&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">MainActivity&period;java<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>package com&period;example&period;databindingexample&semi;&NewLine;&NewLine;import android&period;os&period;Bundle&semi;&NewLine;import android&period;view&period;View&semi;&NewLine;import android&period;widget&period;EditText&semi;&NewLine;import com&period;example&period;databindingexample&period;databinding&period;ActivityMainBinding&semi;&NewLine;import androidx&period;appcompat&period;app&period;AppCompatActivity&semi;&NewLine;import androidx&period;databinding&period;DataBindingUtil&semi;&NewLine;import androidx&period;databinding&period;ObservableArrayMap&semi;&NewLine;&NewLine;public class MainActivity extends AppCompatActivity &lbrace;&NewLine;&NewLine; ActivityMainBinding binding&semi;&NewLine; ClickHandler handler&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;"> ObservableArrayMap&lt&semi;String&comma; String&gt&semi; list&semi;<&sol;span><&sol;strong>&NewLine;&NewLine; &commat;Override&NewLine; protected void onCreate&lpar;Bundle savedInstanceState&rpar; &lbrace;&NewLine; super&period;onCreate&lpar;savedInstanceState&rpar;&semi;&NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine; binding &equals; DataBindingUtil&period;setContentView&lpar;this&comma; R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">list &equals; new ObservableArrayMap&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine; list&period;put&lpar;"firstName"&comma; "Arun"&rpar;&semi;&NewLine; list&period;put&lpar;"lastName"&comma; "Chandravanshi"&rpar;&semi;&NewLine; binding&period;setUserlist&lpar;list&rpar;&semi;<&sol;span><&sol;strong>&NewLine;&NewLine; handler &equals; new ClickHandler&lpar;binding&period;edtFname&comma; binding&period;edtLname&rpar;&semi;&NewLine; binding&period;setHandler&lpar;handler&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; public class ClickHandler &lbrace;&NewLine;&NewLine; EditText edtFirstName&comma; edtLastName&semi;&NewLine;&NewLine; public ClickHandler&lpar;EditText edtFirstName&comma; EditText edtLastName&rpar; &lbrace;&NewLine; this&period;edtFirstName &equals; edtFirstName&semi;&NewLine; this&period;edtLastName &equals; edtLastName&semi;&NewLine; &rcub;&NewLine;&NewLine; public void updateName&lpar;View view&rpar; &lbrace;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">list&period;put&lpar;"firstName"&comma; edtFirstName&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&semi;&NewLine; list&period;put&lpar;"lastName"&comma; edtLastName&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&semi;<&sol;span><&sol;strong>&NewLine; &NewLine; &rcub;&NewLine;&NewLine; &rcub;&NewLine;&rcub;<&sol;pre>&NewLine;<p>The <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableArrayMap<&sol;span><&sol;strong>&lt&semi;K&comma; V&gt&semi; class consists of <strong><span style&equals;"color&colon; &num;0000ff&semi;">put&lpar;&rpar;<&sol;span><&sol;strong> which internally calls notifyChange&lpar;K&rpar; &lpar;notifies listeners that the value of this key has changed and now the UI will be updated with the new value&rpar;&period;<&sol;p>&NewLine;<p><strong>2<&sol;strong> &period;In activity&lowbar;main&period;xml inside <strong><span style&equals;"color&colon; &num;008000&semi;">&lt&semi;data&gt&semi;<&sol;span><&sol;strong> tag  we will define a variable named <span style&equals;"color&colon; &num;008000&semi;"><strong>userlist<&sol;strong><&sol;span> pointing to <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableArrayMap<&sol;span><&sol;strong> class object&period;<&sol;p>&NewLine;<p>To access list data inside views we have to write like this&colon;<&sol;p>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;userlist&period;firstName&rcub;"<&sol;span><&sol;strong><&sol;pre>&NewLine;<p>where <strong><span style&equals;"color&colon; &num;008000&semi;">firstName<&sol;span><&sol;strong> is the key name&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">activity&lowbar;main&period;xml<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&NewLine;&lt&semi;layout xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine; xmlns&colon;app&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res-auto"&NewLine; xmlns&colon;tools&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;tools"&gt&semi;&NewLine;&NewLine; &lt&semi;data&gt&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&lt&semi;import type&equals;"androidx&period;databinding&period;ObservableArrayMap"&sol;&gt&semi;&NewLine;&NewLine; &lt&semi;variable&NewLine; name&equals;"userlist"&NewLine; type&equals;"ObservableArrayMap&amp&semi;lt&semi;String&comma;String&gt&semi;" &sol;&gt&semi;<&sol;span><&sol;strong>&NewLine;&NewLine; &lt&semi;variable&NewLine; name&equals;"handler"&NewLine; type&equals;"com&period;example&period;databindingexample&period;MainActivity&period;ClickHandler" &sol;&gt&semi;&NewLine; &lt&semi;&sol;data&gt&semi;&NewLine;&NewLine; &lt&semi;LinearLayout&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;margin&equals;"30dp"&NewLine; android&colon;orientation&equals;"vertical"&NewLine; tools&colon;context&equals;"&period;MainActivity"&gt&semi;&NewLine;&NewLine; &lt&semi;LinearLayout&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;orientation&equals;"vertical"&NewLine; android&colon;padding&equals;"35dp"&NewLine; android&colon;background&equals;"&commat;drawable&sol;background"&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;firstName"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;textSize&equals;"30sp"&NewLine; android&colon;layout&lowbar;marginTop&equals;"10dp"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;userlist&period;firstName&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&sol;&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;lastName"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;textSize&equals;"30sp"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;userlist&period;lastName&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&NewLine; &sol;&gt&semi;&NewLine; &lt&semi;&sol;LinearLayout&gt&semi;&NewLine;&NewLine;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;fname"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"60dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter First Name"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;lname"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter Last Name"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;Button&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;btn&lowbar;update"&NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;onClick&equals;"&commat;&lbrace;handler&colon;&colon;updateName&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;layout&lowbar;gravity&equals;"center"&NewLine; android&colon;textSize&equals;"15sp"&NewLine; android&colon;background&equals;"&commat;drawable&sol;background"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;padding&equals;"18dp"&NewLine; android&colon;text&equals;"UPDATE NAME"&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&NewLine; &sol;&gt&semi;&NewLine; &lt&semi;&sol;LinearLayout&gt&semi;&NewLine;&NewLine;&lt&semi;&sol;layout&gt&semi;<&sol;pre>&NewLine;<p>When you run the code for both <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableArrayList<&sol;span><&sol;strong> and <strong><span style&equals;"color&colon; &num;008000&semi;">ObservableArrayMap<&sol;span><&sol;strong> it will look like this&colon;<&sol;p>&NewLine;<h3><img class&equals;"alignnone wp-image-1586" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2020&sol;02&sol;Screenshot&lowbar;1582534216&period;png" alt&equals;"Screenshot&lowbar;1582534216" width&equals;"319" height&equals;"567" &sol;>   <img class&equals;"alignnone wp-image-1587" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2020&sol;02&sol;Screenshot&lowbar;1582534224&period;png" alt&equals;"Screenshot&lowbar;1582534224" width&equals;"319" height&equals;"567" &sol;><&sol;h3>&NewLine;<h3><&sol;h3>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Observable Objects<&sol;strong><&sol;span><&sol;h3>&NewLine;<p class&equals;"p1">The Data Binding library provides the <span style&equals;"color&colon; &num;000000&semi;">BaseObservable<&sol;span> class which implements the listener registration mechanism&period; To make the object observable&comma; extend the class from <span style&equals;"color&colon; &num;008000&semi;"><b>BaseObservable<&sol;b><&sol;span>&period;<&sol;p>&NewLine;<ul class&equals;"ul1">&NewLine;<li class&equals;"li1">To make a property observable&comma; use <span style&equals;"color&colon; &num;008000&semi;"><b>&commat;Bindable<&sol;b><&sol;span> annotation on getter method&period;<&sol;li>&NewLine;<li class&equals;"li1">Call <span style&equals;"color&colon; &num;008000&semi;"><b>notifyPropertyChanged&lpar;BR&period;property&rpar;<&sol;b><&sol;span> in setter method to update the UI whenever the data is changed&period;<&sol;li>&NewLine;<li class&equals;"li1">The <span style&equals;"color&colon; &num;008000&semi;"><b>BR<&sol;b><&sol;span> class will be generated automatically when data binding is enabled&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<p>Let&&num;8217&semi;s understand with an example how to make <strong><span style&equals;"color&colon; &num;008000&semi;">Object<&sol;span><&sol;strong> observable&period;<&sol;p>&NewLine;<p class&equals;"p1"><strong>1<&sol;strong> &period;Below is the modified <span style&equals;"color&colon; &num;008000&semi;"><b>User<&sol;b><&sol;span> class that extends <span style&equals;"color&colon; &num;008000&semi;"><b>BaseObservable<&sol;b><&sol;span>&period; You can notice here <span style&equals;"color&colon; &num;008000&semi;"><b>notifyPropertyChanged&lpar;&rpar;<&sol;b><&sol;span> is called after assigning new values&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">User&period;java<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>package com&period;example&period;databindingexample&semi;&NewLine;&NewLine;import androidx&period;databinding&period;BaseObservable&semi;&NewLine;import androidx&period;databinding&period;Bindable&semi;&NewLine;&NewLine;public class User extends <strong><span style&equals;"color&colon; &num;008000&semi;">BaseObservable<&sol;span><&sol;strong> &lbrace;&NewLine;&NewLine; public String firstName&comma; lastName&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&commat;Bindable<&sol;span><&sol;strong>&NewLine; public String getFirstName&lpar;&rpar; &lbrace;&NewLine; return firstName&semi;&NewLine; &rcub;&NewLine;&NewLine; public void setFirstName&lpar;String firstName&rpar; &lbrace;&NewLine; this&period;firstName &equals; firstName&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">notifyPropertyChanged&lpar;BR&period;firstName&rpar;&semi;<&sol;span><&sol;strong>&NewLine; &rcub;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;"> &commat;Bindable<&sol;span><&sol;strong>&NewLine; public String getLastName&lpar;&rpar; &lbrace;&NewLine; return lastName&semi;&NewLine; &rcub;&NewLine;&NewLine; public void setLastName&lpar;String lastName&rpar; &lbrace;&NewLine; this&period;lastName &equals; lastName&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">notifyPropertyChanged&lpar;BR&period;lastName&rpar;&semi;<&sol;span><&sol;strong>&NewLine; &rcub;&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;<p class&equals;"p1">We must specify the getter method of the specific field with the <strong><span style&equals;"color&colon; &num;008000&semi;">&commat;Bindable<&sol;span><&sol;strong> annotation to generate the specific field inside <strong><span style&equals;"color&colon; &num;008000&semi;">BR<&sol;span><&sol;strong> class which we will pass from the <strong><span style&equals;"color&colon; &num;008000&semi;">notifyPropertyChanged&lpar;&rpar;<&sol;span> <&sol;strong>inside the setter method&period;<&sol;p>&NewLine;<p class&equals;"p1"><strong>2<&sol;strong> &period;The generated BR class for the app is shown below&colon;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">BR&period;java<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>package com&period;example&period;databindingexample&semi;&NewLine;&NewLine;public class BR &lbrace;&NewLine; &NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">public static final int &lowbar;all &equals; 0&semi;<&sol;span><&sol;strong>&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">  public static final int firstName &equals; 1&semi;<&sol;span><&sol;strong>&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">  public static final int lastName &equals; 2&semi;<&sol;span><&sol;strong>&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">  public static final int handler &equals; 3&semi;<&sol;span><&sol;strong>&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">  public static final int user &equals; 4&semi;<&sol;span><&sol;strong>&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;<p class&equals;"p1">BR class also consists of variable names defined inside the <span style&equals;"color&colon; &num;008000&semi;"><strong>activity&lowbar;main&period;xml<&sol;strong><&sol;span> file&period;<&sol;p>&NewLine;<p class&equals;"p1"><span style&equals;"color&colon; &num;000000&semi;"><strong>3<&sol;strong><&sol;span> &period;Inside activity&lowbar;main&period;xml file&comma; I have defined two variables with name user &lpar;a reference for User class object&rpar; and handler&lpar;a reference for ClickHandler class object&rpar; inside <span style&equals;"color&colon; &num;008000&semi;"><strong>&lt&semi;data&gt&semi;<&sol;strong><&sol;span> tag&colon;<&sol;p>&NewLine;<p>To access the object property inside views we have to simply write &colon;<&sol;p>&NewLine;<pre><span style&equals;"color&colon; &num;008000&semi;"><strong>android&colon;text&equals;"&commat;&lbrace;user&period;firstName&rcub;"<&sol;strong><&sol;span><&sol;pre>&NewLine;<p>Wher <strong><span style&equals;"color&colon; &num;008000&semi;">firstName<&sol;span><&sol;strong> is the User object property name&period;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>activity&lowbar;main&period;xml<&sol;strong><&sol;span><&sol;p>&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&NewLine;&lt&semi;layout xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine; xmlns&colon;app&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res-auto"&NewLine; xmlns&colon;tools&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;tools"&gt&semi;&NewLine;&NewLine; &lt&semi;data&gt&semi;&NewLine; &lt&semi;<strong><span style&equals;"color&colon; &num;008000&semi;">variable&NewLine; name&equals;"user"&NewLine; type&equals;"com&period;example&period;databindingexample&period;User" &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;variable&NewLine; name&equals;"handler"&NewLine; type&equals;"com&period;example&period;databindingexample&period;MainActivity&period;ClickHandler" &sol;&gt&semi;<&sol;span><&sol;strong>&NewLine; &lt&semi;&sol;data&gt&semi;&NewLine;&NewLine; &lt&semi;LinearLayout&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;margin&equals;"30dp"&NewLine; android&colon;orientation&equals;"vertical"&NewLine; tools&colon;context&equals;"&period;MainActivity"&gt&semi;&NewLine;&NewLine; &lt&semi;LinearLayout&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;orientation&equals;"vertical"&NewLine; android&colon;padding&equals;"35dp"&NewLine; android&colon;background&equals;"&commat;drawable&sol;background"&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;firstName"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;textSize&equals;"30sp"&NewLine; android&colon;layout&lowbar;marginTop&equals;"10dp"&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>android&colon;text&equals;"&commat;&lbrace;user&period;firstName&rcub;"<&sol;strong><&sol;span>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&sol;&gt&semi;&NewLine;&NewLine; &lt&semi;TextView&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;tv&lowbar;lastName"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;textSize&equals;"30sp"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;text&equals;"&commat;&lbrace;user&period;lastName&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&NewLine; &sol;&gt&semi;&NewLine; &lt&semi;&sol;LinearLayout&gt&semi;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;fname"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"60dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter First Name"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;EditText&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;edt&lowbar;lname"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;textSize&equals;"22sp"&NewLine; android&colon;hint&equals;"Enter Last Name"&NewLine; &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;Button&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;btn&lowbar;update"&NewLine; android&colon;layout&lowbar;width&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">android&colon;onClick&equals;"&commat;&lbrace;handler&colon;&colon;updateName&rcub;"<&sol;span><&sol;strong>&NewLine; android&colon;layout&lowbar;gravity&equals;"center"&NewLine; android&colon;textSize&equals;"15sp"&NewLine; android&colon;background&equals;"&commat;drawable&sol;background"&NewLine; android&colon;layout&lowbar;marginTop&equals;"30dp"&NewLine; android&colon;padding&equals;"18dp"&NewLine; android&colon;text&equals;"UPDATE NAME"&NewLine; android&colon;textColor&equals;"&commat;android&colon;color&sol;holo&lowbar;blue&lowbar;dark"&NewLine; android&colon;textStyle&equals;"bold"&NewLine; &sol;&gt&semi;&NewLine; &lt&semi;&sol;LinearLayout&gt&semi;&NewLine; &NewLine;&lt&semi;&sol;layout&gt&semi;<&sol;pre>&NewLine;<p class&equals;"p1"><strong>4<&sol;strong> &period;Open MainActivity&period;java&period; To test this&lpar;observable object&rpar;&comma; I am changing user object properties on button click&period; You can see the UI updated on button&lpar;UPDATE NAME&rpar; click right away&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">MainActivity&period;java<&sol;span><&sol;strong><&sol;p>&NewLine;<pre>package com&period;example&period;databindingexample&semi;&NewLine;&NewLine;import android&period;os&period;Bundle&semi;&NewLine;import android&period;view&period;View&semi;&NewLine;import android&period;widget&period;EditText&semi;&NewLine;&NewLine;import com&period;example&period;databindingexample&period;databinding&period;ActivityMainBinding&semi;&NewLine;&NewLine;import androidx&period;appcompat&period;app&period;AppCompatActivity&semi;&NewLine;import androidx&period;databinding&period;DataBindingUtil&semi;&NewLine;&NewLine;public class MainActivity extends AppCompatActivity &lbrace;&NewLine;&NewLine; ActivityMainBinding binding&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">User user&semi;<&sol;span><&sol;strong>&NewLine; ClickHandler handler&semi;&NewLine;&NewLine; &commat;Override&NewLine; protected void onCreate&lpar;Bundle savedInstanceState&rpar; &lbrace;&NewLine; super&period;onCreate&lpar;savedInstanceState&rpar;&semi;&NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine; binding &equals; DataBindingUtil&period;setContentView&lpar;this&comma; R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">user &equals; new User&lpar;&rpar;&semi;&NewLine; user&period;setFirstName&lpar;"Arun"&rpar;&semi;&NewLine; user&period;setLastName&lpar;"Chandravanshi"&rpar;&semi;&NewLine; binding&period;setUser&lpar;user&rpar;&semi;&NewLine;<&sol;span><&sol;strong>&NewLine; handler &equals; new ClickHandler&lpar;binding&period;edtFname&comma;binding&period;edtLname&rpar;&semi;&NewLine; binding&period;setHandler&lpar;handler&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; public class ClickHandler &lbrace;&NewLine;&NewLine; EditText edtFirstName&comma; edtLastName&semi;&NewLine;&NewLine; public ClickHandler&lpar;EditText edtFirstName&comma; EditText edtLastName&rpar; &lbrace;&NewLine; this&period;edtFirstName &equals; edtFirstName&semi;&NewLine; this&period;edtLastName &equals; edtLastName&semi;&NewLine; &rcub;&NewLine;&NewLine; public void updateName&lpar;View view&rpar; &lbrace;&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong> user&period;setFirstName&lpar;edtFirstName&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&semi;&NewLine; user&period;setLastName&lpar;edtLastName&period;getText&lpar;&rpar;&period;toString&lpar;&rpar;&rpar;&semi;<&sol;strong><&sol;span>&NewLine; &rcub;&NewLine;&NewLine; &rcub;&NewLine;&rcub;<&sol;pre>&NewLine;<p class&equals;"p1">When you run the app It will look like this&colon;<&sol;p>&NewLine;<p><img class&equals;"alignnone wp-image-1584" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2020&sol;02&sol;Screenshot&lowbar;1582370409&period;png" alt&equals;"Screenshot&lowbar;1582370409" width&equals;"320" height&equals;"569" &sol;> <img class&equals;"alignnone wp-image-1585" src&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;wp-content&sol;uploads&sol;2020&sol;02&sol;Screenshot&lowbar;1582370469&period;png" alt&equals;"Screenshot&lowbar;1582370469" width&equals;"320" height&equals;"569" &sol;><&sol;p>&NewLine;<p>I hope this article will help you in understanding how to work with Observable data objects using DataBinding&period;&NewLine;

Exit mobile version