SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Jquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsJquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsEPAM Systems
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Aaron Gustafson
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJSDavid Parsons
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced JavascriptAdieu
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuerymanugoel2003
 
HTML and CSS crash course!
HTML and CSS crash course!HTML and CSS crash course!
HTML and CSS crash course!Ana Cidre
 
Pass by value and pass by reference
Pass by value and pass by reference Pass by value and pass by reference
Pass by value and pass by reference TurnToTech
 
Javascript this keyword
Javascript this keywordJavascript this keyword
Javascript this keywordPham Huy Tung
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScriptMegha V
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript ProgrammingSehwan Noh
 
Asynchronous JavaScript & XML (AJAX)
Asynchronous JavaScript & XML (AJAX)Asynchronous JavaScript & XML (AJAX)
Asynchronous JavaScript & XML (AJAX)Adnan Sohail
 
MYSQL Aggregate Functions
MYSQL Aggregate FunctionsMYSQL Aggregate Functions
MYSQL Aggregate FunctionsLeroy Blair
 

Tendances (20)

Java 8 Lambda and Streams
Java 8 Lambda and StreamsJava 8 Lambda and Streams
Java 8 Lambda and Streams
 
HTML5 DRAG AND DROP
HTML5 DRAG AND DROPHTML5 DRAG AND DROP
HTML5 DRAG AND DROP
 
Jquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript BasicsJquery Complete Presentation along with Javascript Basics
Jquery Complete Presentation along with Javascript Basics
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
 
Dom
DomDom
Dom
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced Javascript
 
Angular
AngularAngular
Angular
 
Java annotations
Java annotationsJava annotations
Java annotations
 
Introduction to jQuery
Introduction to jQueryIntroduction to jQuery
Introduction to jQuery
 
HTML and CSS crash course!
HTML and CSS crash course!HTML and CSS crash course!
HTML and CSS crash course!
 
Pass by value and pass by reference
Pass by value and pass by reference Pass by value and pass by reference
Pass by value and pass by reference
 
Javascript this keyword
Javascript this keywordJavascript this keyword
Javascript this keyword
 
Angular Directives
Angular DirectivesAngular Directives
Angular Directives
 
Introduction to JavaScript
Introduction to JavaScriptIntroduction to JavaScript
Introduction to JavaScript
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
JavaScript Programming
JavaScript ProgrammingJavaScript Programming
JavaScript Programming
 
Asynchronous JavaScript & XML (AJAX)
Asynchronous JavaScript & XML (AJAX)Asynchronous JavaScript & XML (AJAX)
Asynchronous JavaScript & XML (AJAX)
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
MYSQL Aggregate Functions
MYSQL Aggregate FunctionsMYSQL Aggregate Functions
MYSQL Aggregate Functions
 

En vedette

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 & ButtonsDeep Patel
 
Dynamic positioning
Dynamic positioningDynamic positioning
Dynamic positioningZaw Aung
 

En vedette (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)
 

Similaire à Data Binding

Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data BindingEric 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 GervinBarry Gervin
 
Data Binding - Android by Harin Trivedi
Data Binding - Android by Harin TrivediData Binding - Android by Harin Trivedi
Data Binding - Android by Harin Trivediharintrivedi
 
07_UIAndroid.pdf
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdfImranS18
 
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 + SpringBryan Hsueh
 
Data binding в массы!
Data binding в массы!Data binding в массы!
Data binding в массы!Artjoker
 
Modern frontend development with VueJs
Modern frontend development with VueJsModern frontend development with VueJs
Modern frontend development with VueJsTudor Barbu
 
Asp.net mvc training
Asp.net mvc trainingAsp.net mvc training
Asp.net mvc trainingicubesystem
 
Android data binding
Android data bindingAndroid data binding
Android data bindingAjit Singh
 
Angular Directives from Scratch
Angular Directives from ScratchAngular Directives from Scratch
Angular Directives from ScratchChristian 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 AngularJSmurtazahaveliwala
 

Similaire à 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