SlideShare a Scribd company logo
Data Binding
2015-OCTOBER-2ND
LAY Leangsros
Outline
I. Introduction
II. Using
III. Features
IV. Problems
2
Introduction
What is Data Binding?
- Data binding binds a data model object to a UI elements
- Announced at Google I/O 2015
Model Binding View
3
Introduction
Why do we need it?
- Remove unnecessary code ( add…Listener, findViewById, setText)
- Aid Memory Management
- Value code quality
4
Introduction
Why do we need it?
- Remove unnecessary code ( add..Listener, findViewById, setText)
5
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.getmItemBinding().setUser(mUserList.get(position));
holder.getmItemBinding().executePendingBindings();
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.name.setText(..);
holder.age.setText(..);
...
}
N
1
Introduction
Why do we need it?
- Aid Memory Management
- Value code quality
6
Using
What do we need?
- Minimum API-level 7 (2.1)
- Android Studio 1.3.0 or higher
- Add library in root build.gradle
- Apply plugin in build.gradle app
dependencies {
..
classpath "com.android.databinding:dataBinder:1.0-rc1"
}
apply plugin: 'com.android.databinding'
7
Using
How do we use?
- Preparing the Model
- Preparing the Layout
- Connect Model and Layout in your activity
8
Using
How do we use?
9
User.java MainActivity.java
ExampleLayoutBinding
Handler.java
ExampleLayoutBinding.java
public void setHandler(Handler handler);
public void setUser(User user);
…….
example_layout.xml
handler
user
Using
How do we use?
10
public class User extends BaseObservable{
public String name;
public int age;
//Setter and Getter
}
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.dmi.bindingview.User"/>
</data>
<RelativeLayout
......
<TextView
......
android:text="@{user.name}"/>
</RelativeLayout>
</layout>
private ActivityMainBinding mBinding;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
mBinding.setUser(mUser);
}
}
User.java
activity_main.xml
MainActivity.class
Features
More Features
- Imports Classes
- Supporting Resources
- Expression Languages
11
Features
More Features
- Imports Classes
12
..
<layout
..
<data>
<import type="android.view.View"/>
<variable name="user" type="com.dmi.bindingview.User"/>
</data>
<LinearLayout
.. >
<TextView
..
android:visibility="@{user.age>20 ? View.VISIBLE : View.GONE}"/>
</LinearLayout>
</layout>
Features
More Features
- Supporting Resources
13
android:text="@{@string/nameFormat(firstName, lastName)}"
android:text="@{@plurals/banana(bananaCount)}"
android:padding="@{@dimen/largePadding}"
android:textColor="@{@color/red}"
Features
More Features
- Expression Languages
14
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Binary & | ^
• Unary + - ! ~
• Shift >> >>> <<
• Comparison == > < >= <=
• instanceof
• Grouping ()
• Literals - character, String, numeric, null
• Cast
• Method calls
• Field access
• Array access []
• Ternary operator ?:
It is like Java expressions
Problems
Current Problems
- IDE-Support currently poor
* Error indicated, but it compiles and works
* No code completion in layout
- API not stable, it is in beta.
15
Demo
16
References
17
- Documentation: https://developer.android.com/tools/data-binding/guide.html
- Android Data Binding - Christopher Schott / Florian Fetzer: https://droidcon.gitbooks.io/2015-berlin-
barcamp/content/android_data_binding_-_christopher_schott__florian_fetzer.html
- Import : http://catinean.com/2015/05/31/how-you-can-go-wrong-with-the-new-data-binding-api/
- Google I/O 2015 - What's new in Android (13th min) : https://www.youtube.com/watch?v=ndBdf1_oOGA

More Related Content

What's hot

Hibernate tutorial for beginners
Hibernate tutorial for beginnersHibernate tutorial for beginners
Hibernate tutorial for beginners
Rahul Jain
 
JavaScript Tutorial
JavaScript  TutorialJavaScript  Tutorial
JavaScript Tutorial
Bui Kiet
 
Introduction to ADO.NET
Introduction to ADO.NETIntroduction to ADO.NET
Introduction to ADO.NET
rchakra
 
Spring boot
Spring bootSpring boot
Spring boot
sdeeg
 
Love at first Vue
Love at first VueLove at first Vue
Love at first Vue
Dalibor Gogic
 
Java beans
Java beansJava beans
Java beans
Rajkiran Mummadi
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced JavascriptAdieu
 
JavaScript & Dom Manipulation
JavaScript & Dom ManipulationJavaScript & Dom Manipulation
JavaScript & Dom Manipulation
Mohammed Arif
 
ADO Controls - Database Usage from Exploring MS Visual Basic 6.0 Book
ADO Controls - Database Usage from Exploring MS Visual Basic 6.0 BookADO Controls - Database Usage from Exploring MS Visual Basic 6.0 Book
ADO Controls - Database Usage from Exploring MS Visual Basic 6.0 Book
Muralidharan Radhakrishnan
 
Nodejs functions & modules
Nodejs functions & modulesNodejs functions & modules
Nodejs functions & modules
monikadeshmane
 
Java Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsJava Server Faces (JSF) - Basics
Java Server Faces (JSF) - Basics
BG Java EE Course
 
Introduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionIntroduction to Spring's Dependency Injection
Introduction to Spring's Dependency Injection
Richard Paul
 
12 tips on Django Best Practices
12 tips on Django Best Practices12 tips on Django Best Practices
12 tips on Django Best Practices
David Arcos
 
JavaScript Objects
JavaScript ObjectsJavaScript Objects
JavaScript Objects
Reem Alattas
 
ORM: Object-relational mapping
ORM: Object-relational mappingORM: Object-relational mapping
ORM: Object-relational mapping
Abhilash M A
 
React and redux
React and reduxReact and redux
React and redux
Mystic Coders, LLC
 
Reactjs
Reactjs Reactjs
Reactjs
Neha Sharma
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
Jeevesh Pandey
 

What's hot (20)

Hibernate tutorial for beginners
Hibernate tutorial for beginnersHibernate tutorial for beginners
Hibernate tutorial for beginners
 
CSS and CSS3
CSS and CSS3CSS and CSS3
CSS and CSS3
 
JavaScript Tutorial
JavaScript  TutorialJavaScript  Tutorial
JavaScript Tutorial
 
Introduction to ADO.NET
Introduction to ADO.NETIntroduction to ADO.NET
Introduction to ADO.NET
 
Spring boot
Spring bootSpring boot
Spring boot
 
Local storage
Local storageLocal storage
Local storage
 
Love at first Vue
Love at first VueLove at first Vue
Love at first Vue
 
Java beans
Java beansJava beans
Java beans
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced Javascript
 
JavaScript & Dom Manipulation
JavaScript & Dom ManipulationJavaScript & Dom Manipulation
JavaScript & Dom Manipulation
 
ADO Controls - Database Usage from Exploring MS Visual Basic 6.0 Book
ADO Controls - Database Usage from Exploring MS Visual Basic 6.0 BookADO Controls - Database Usage from Exploring MS Visual Basic 6.0 Book
ADO Controls - Database Usage from Exploring MS Visual Basic 6.0 Book
 
Nodejs functions & modules
Nodejs functions & modulesNodejs functions & modules
Nodejs functions & modules
 
Java Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsJava Server Faces (JSF) - Basics
Java Server Faces (JSF) - Basics
 
Introduction to Spring's Dependency Injection
Introduction to Spring's Dependency InjectionIntroduction to Spring's Dependency Injection
Introduction to Spring's Dependency Injection
 
12 tips on Django Best Practices
12 tips on Django Best Practices12 tips on Django Best Practices
12 tips on Django Best Practices
 
JavaScript Objects
JavaScript ObjectsJavaScript Objects
JavaScript Objects
 
ORM: Object-relational mapping
ORM: Object-relational mappingORM: Object-relational mapping
ORM: Object-relational mapping
 
React and redux
React and reduxReact and redux
React and redux
 
Reactjs
Reactjs Reactjs
Reactjs
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 

Viewers also liked

15. session 15 data binding
15. session 15   data binding15. session 15   data binding
15. session 15 data bindingPhúc Đỗ
 
DHTML - Events & Buttons
DHTML - Events  & ButtonsDHTML - Events  & Buttons
DHTML - Events & Buttons
Deep Patel
 
Dynamic positioning
Dynamic positioningDynamic positioning
Dynamic positioning
Zaw Aung
 
Dhtml sohaib ch
Dhtml sohaib chDhtml sohaib ch
Dhtml sohaib ch
Sohaib Chaudhery
 
Dynamic HTML (DHTML)
Dynamic HTML (DHTML)Dynamic HTML (DHTML)
Dynamic HTML (DHTML)
Himanshu Kumar
 

Viewers also liked (6)

15. session 15 data binding
15. session 15   data binding15. session 15   data binding
15. session 15 data binding
 
DHTML - Events & Buttons
DHTML - Events  & ButtonsDHTML - Events  & Buttons
DHTML - Events & Buttons
 
Dynamic positioning
Dynamic positioningDynamic positioning
Dynamic positioning
 
Dhtml sohaib ch
Dhtml sohaib chDhtml sohaib ch
Dhtml sohaib ch
 
Dhtml
DhtmlDhtml
Dhtml
 
Dynamic HTML (DHTML)
Dynamic HTML (DHTML)Dynamic HTML (DHTML)
Dynamic HTML (DHTML)
 

Similar to Data Binding

Data binding w Androidzie
Data binding w AndroidzieData binding w Androidzie
Data binding w Androidzie
The Software House
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
Eric Maxwell
 
Data binding в массы! (1.2)
Data binding в массы! (1.2)Data binding в массы! (1.2)
Data binding в массы! (1.2)
Yurii Kotov
 
"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин
Fwdays
 
Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"
Fwdays
 
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry GervinWill your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
Barry Gervin
 
Data Binding - Android by Harin Trivedi
Data Binding - Android by Harin TrivediData Binding - Android by Harin Trivedi
Data Binding - Android by Harin Trivedi
harintrivedi
 
07_UIAndroid.pdf
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdf
ImranS18
 
MVVM & Data Binding Library
MVVM & Data Binding Library MVVM & Data Binding Library
MVVM & Data Binding Library
10Clouds
 
Struts 2 + Spring
Struts 2 + SpringStruts 2 + Spring
Struts 2 + Spring
Bryan Hsueh
 
Data binding в массы!
Data binding в массы!Data binding в массы!
Data binding в массы!
Artjoker
 
Korhan bircan
Korhan bircanKorhan bircan
Korhan bircan
Korhan Bircan
 
Compose In Practice
Compose In PracticeCompose In Practice
Compose In Practice
Kelvin Harron
 
Modern frontend development with VueJs
Modern frontend development with VueJsModern frontend development with VueJs
Modern frontend development with VueJs
Tudor Barbu
 
Asp.net mvc training
Asp.net mvc trainingAsp.net mvc training
Asp.net mvc training
icubesystem
 
Asp.NET MVC
Asp.NET MVCAsp.NET MVC
Asp.NET MVC
vrluckyin
 
Android data binding
Android data bindingAndroid data binding
Android data binding
Ajit Singh
 
Angular Directives from Scratch
Angular Directives from ScratchAngular Directives from Scratch
Angular Directives from Scratch
Christian Lilley
 
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJSAngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
murtazahaveliwala
 

Similar to Data Binding (20)

Data binding w Androidzie
Data binding w AndroidzieData binding w Androidzie
Data binding w Androidzie
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
 
Data binding в массы! (1.2)
Data binding в массы! (1.2)Data binding в массы! (1.2)
Data binding в массы! (1.2)
 
"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин
 
Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"
 
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry GervinWill your code blend? : Toronto Code Camp 2010 : Barry Gervin
Will your code blend? : Toronto Code Camp 2010 : Barry Gervin
 
Data Binding - Android by Harin Trivedi
Data Binding - Android by Harin TrivediData Binding - Android by Harin Trivedi
Data Binding - Android by Harin Trivedi
 
07_UIAndroid.pdf
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdf
 
MVVM & Data Binding Library
MVVM & Data Binding Library MVVM & Data Binding Library
MVVM & Data Binding Library
 
Struts 2 + Spring
Struts 2 + SpringStruts 2 + Spring
Struts 2 + Spring
 
Data binding в массы!
Data binding в массы!Data binding в массы!
Data binding в массы!
 
Korhan bircan
Korhan bircanKorhan bircan
Korhan bircan
 
Compose In Practice
Compose In PracticeCompose In Practice
Compose In Practice
 
Modern frontend development with VueJs
Modern frontend development with VueJsModern frontend development with VueJs
Modern frontend development with VueJs
 
Asp.net mvc training
Asp.net mvc trainingAsp.net mvc training
Asp.net mvc training
 
Asp.NET MVC
Asp.NET MVCAsp.NET MVC
Asp.NET MVC
 
.Net template solution architecture
.Net template solution architecture.Net template solution architecture
.Net template solution architecture
 
Android data binding
Android data bindingAndroid data binding
Android data binding
 
Angular Directives from Scratch
Angular Directives from ScratchAngular Directives from Scratch
Angular Directives from Scratch
 
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJSAngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
AngularJS training - Day 1 - Basics: Why, What and basic features of AngularJS
 

Data Binding

  • 2. Outline I. Introduction II. Using III. Features IV. Problems 2
  • 3. Introduction What is Data Binding? - Data binding binds a data model object to a UI elements - Announced at Google I/O 2015 Model Binding View 3
  • 4. Introduction Why do we need it? - Remove unnecessary code ( add…Listener, findViewById, setText) - Aid Memory Management - Value code quality 4
  • 5. Introduction Why do we need it? - Remove unnecessary code ( add..Listener, findViewById, setText) 5 @Override public void onBindViewHolder(MyViewHolder holder, final int position) { holder.getmItemBinding().setUser(mUserList.get(position)); holder.getmItemBinding().executePendingBindings(); } @Override public void onBindViewHolder(MyViewHolder holder, final int position) { holder.name.setText(..); holder.age.setText(..); ... } N 1
  • 6. Introduction Why do we need it? - Aid Memory Management - Value code quality 6
  • 7. Using What do we need? - Minimum API-level 7 (2.1) - Android Studio 1.3.0 or higher - Add library in root build.gradle - Apply plugin in build.gradle app dependencies { .. classpath "com.android.databinding:dataBinder:1.0-rc1" } apply plugin: 'com.android.databinding' 7
  • 8. Using How do we use? - Preparing the Model - Preparing the Layout - Connect Model and Layout in your activity 8
  • 9. Using How do we use? 9 User.java MainActivity.java ExampleLayoutBinding Handler.java ExampleLayoutBinding.java public void setHandler(Handler handler); public void setUser(User user); ……. example_layout.xml handler user
  • 10. Using How do we use? 10 public class User extends BaseObservable{ public String name; public int age; //Setter and Getter } <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.dmi.bindingview.User"/> </data> <RelativeLayout ...... <TextView ...... android:text="@{user.name}"/> </RelativeLayout> </layout> private ActivityMainBinding mBinding; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); mBinding.setUser(mUser); } } User.java activity_main.xml MainActivity.class
  • 11. Features More Features - Imports Classes - Supporting Resources - Expression Languages 11
  • 12. Features More Features - Imports Classes 12 .. <layout .. <data> <import type="android.view.View"/> <variable name="user" type="com.dmi.bindingview.User"/> </data> <LinearLayout .. > <TextView .. android:visibility="@{user.age>20 ? View.VISIBLE : View.GONE}"/> </LinearLayout> </layout>
  • 13. Features More Features - Supporting Resources 13 android:text="@{@string/nameFormat(firstName, lastName)}" android:text="@{@plurals/banana(bananaCount)}" android:padding="@{@dimen/largePadding}" android:textColor="@{@color/red}"
  • 14. Features More Features - Expression Languages 14 • Mathematical + - / * % • String concatenation + • Logical && || • Binary & | ^ • Unary + - ! ~ • Shift >> >>> << • Comparison == > < >= <= • instanceof • Grouping () • Literals - character, String, numeric, null • Cast • Method calls • Field access • Array access [] • Ternary operator ?: It is like Java expressions
  • 15. Problems Current Problems - IDE-Support currently poor * Error indicated, but it compiles and works * No code completion in layout - API not stable, it is in beta. 15
  • 17. References 17 - Documentation: https://developer.android.com/tools/data-binding/guide.html - Android Data Binding - Christopher Schott / Florian Fetzer: https://droidcon.gitbooks.io/2015-berlin- barcamp/content/android_data_binding_-_christopher_schott__florian_fetzer.html - Import : http://catinean.com/2015/05/31/how-you-can-go-wrong-with-the-new-data-binding-api/ - Google I/O 2015 - What's new in Android (13th min) : https://www.youtube.com/watch?v=ndBdf1_oOGA