SlideShare a Scribd company logo
Deep dive into
Android Data Binding
+RadoslawPiekarz
@radzio
Radosław Piekarz
Head of Mobile at Tango Agency
droidconde2016
talixo.de
10 € discount
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Setup
// <app-module>/build.gradle
apply plugin: "com.android.application"
android {
dataBinding {
enabled = true
}
}
Changes in layout file
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/my_id"/>
</layout>
Changes in Activity / Fragment code
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MainActivityBinding binding = DataBindingUtil
.setContentView(this, R.layout.main_activity);
binding.myId.setText("John Doe")
}
Type safe!
Binding utils
DataBindingUtil.setContentView(activity, layoutId);
DataBindingUtil.inflate(inflater, layoutId, parent, attachToParrent);
ListItemBinding binding = ListItemBinding.bind(viewRoot);
Use for activities
Use for any view
Bind view that was
already inflated
Changes in layout file
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data class="CustomClassName">
<variable name="user" type="com.example.User"/>
</data>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.firstName}" />
</layout>
Changes in Activity / Fragment Code
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
binding = DataBindingUtil
.setContentView(this, R.layout.main_activity);
binding.setUser(new User());
}
Binding expression operators
Grouping ()
Literals character, String,
numeric, null
Method calls, field access
Ternary operator ?:
Array access []
Null coalescing operator ??
Mathematical + - / * %
String concatenation +
Logical && ||
Binary & | ^
Unary + - ! ~
Shift >> >>> <<
Comparison == > < >= <=
instanceof, cast
Binding expression operators
android:text="@{user.displayName ?? user.lastName}"
android:text="@{user.displayName != null ? user.displayName : user.lastName}"
=
Notifying view #1
public class User extends BaseObservable {
private String firstName;
public User(String firstName) {
this.firstName = firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
notifyPropertyChanged(BR.firstName);
}
@Bindable
public String getFirstName() {
return this.firstName;
}
}
Notifying view #2
public class User {
public final ObservableField<String> firstName;
public User(String name) {
this.firstName = new ObservableField<>(firstName);
}
public void setName(String firstName) {
this.firstName.set(firstName);
}
}
Observable fields & collections
Observable<T>
ObservableBoolean
ObservableByte
ObservableChar
ObservableShort
ObservableInt
ObservableLong
ObservableFloat
ObservableDouble
ObservableParcelable<T>
ObservableList<T>
ObservableArrayList<T>
ObservableMap<K, V>
ObservableArrayMap<K, V>
Binding Adapters
<layout>
<ImageView
bind:imageUrl="@{viewModel.someNiceImageUrl}"
bind:error="@{@drawable/defaultImage}"/>
</layout>
@BindingAdapter({"bind:imageUrl", "bind:error"})
public static void loadImage(ImageView view, String url, Drawable error)
{
Picasso.with(view.getContext()).load(url).error(error).into(view);
}
Binding Adapters
@BindingAdapter({"bind:imageUrl", "bind:error"})
public static void loadImage(ImageView view, String url, Drawable error)
{
Picasso.with(view.getContext()).load(url).error(error).into(view);
}
java.lang.IllegalStateException
Required DataBindingComponent is null. If you don't use an inflation
method taking a DataBindingComponent, use
DataBindingUtil.setDefaultComponent or make all BindingAdapter
methods static.
Binding Component
public class MyDataBindingCoponent implements DataBindingComponent
{
public EditTextBindings getEditTextBindings()
{
return new EditTextBindings();
}
}
Binding Component
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
binding = DataBindingUtil
.setContentView(this,
R.layout.activity_main,
new MyDataBindingCoponent());
binding.setViewModel(new ViewModel());
}
Binding Conversions
android:background="@{isError ? @color/red : @color/white}"
@BindingConversion
public static ColorDrawable convertColorToDrawable(int color) {
return new ColorDrawable(color);
}
Binding methods
@BindingMethods({
@BindingMethod(type = CircularProgressBar.class,
attribute = "progressText", method = "setProgressMessage")
})
public class ViewBindings
{
}
RecyclerView bindings
https://github.com/radzio/android-data-binding-recyclerview
Talk is cheap. Show me the code
RecyclerView Binding #1
<android.support.v7.widget.RecyclerView
android:id="@+id/activity_users_recycler"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:items="@{usersViewModel.users}"
app:itemViewBinder="@{view.itemViewBinder}"
/>
RecyclerView Binding #2
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
usersViewModel = new UsersViewModel();
usersViewModel.users
.add(new SuperUserViewModel(new User("Android", "Dev")));
binding = DataBindingUtil.setContentView(this, R.layout.users_view);
binding.setUsersViewModel(usersViewModel);
binding.setView(this);
}
RecyclerView Binding #3
public class UsersViewModel extends BaseObservable
{
@Bindable
public ObservableArrayList<UserViewModel> users;
public UsersViewModel()
{
this.users = new ObservableArrayList<>();
}
public void addUser(String name, String surname)
{
this.users.add(new UserViewModel(new User(name, surname)));
}
}
RecyclerView Binding #4
public ItemBinder<UserViewModel> itemViewBinder()
{
return new CompositeItemBinder<UserViewModel>(
new SuperUserBinder(BR.user, R.layout.item_super_user),
new UserBinder(BR.user, R.layout.item_user)
);
}
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
How it works?
Bind ViewModel to
View
Register for
property change
callbacks
Trigger
notifyPropertyChanged
Request rebind
Execute pending
bindings
User input or from
code
How it works?
public void setViewModel(TwoWayViewModel viewModel) {
updateRegistration(0, viewModel);
this.mViewModel = viewModel;
synchronized(this) {
mDirtyFlags |= 0x1L;
notifyPropertyChanged(BR.viewModel);
super.requestRebind();
}
How it works?
@Override
protected void executeBindings() {
long dirtyFlags = 0;
synchronized(this) {
dirtyFlags = mDirtyFlags;
mDirtyFlags = 0;
}
if ((dirtyFlags & 0x7L) != 0) {
if (viewModel != null) {
colorViewModel = viewModel.getColor();
}
if ((dirtyFlags & 0x7L) != 0) {
ColorPickerViewBindings.setColor(this.colorpicker, colorViewModel);
EditTextBindings.setText(this.mboundView2, colorViewModel);
}
if ((dirtyFlags & 0x4L) != 0) {
ColorPickerViewBindings.setColorListener(this.colorpicker, null, colorpickercolorAttr);
TextViewBindingAdapter.setTextWatcher(this.mboundView2, null, null, null, mboundView2androidTe);
this.mboundView3.setOnClickListener(mCallback2);
}
}
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Lambdas
<Button
android:onClick="@{() -> viewModel.sendAction()}
/>
public class MainViewModel extends BaseObservable
{
public void sendAction()
{
//code
}
}
Method References
<Button
android:onClick="@{viewModel::sendAction}"
/>
public class MainViewModel extends BaseObservable
{
public void sendAction(View view)
{
//code
}
}
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Two-Way data binding
<layout>
...
<LinearLayout>
<EditText
android:text="@{viewModel.twoWayText}"
/>
</LinearLayout>
</layout>
Two-Way data binding
<layout>
...
<LinearLayout>
<EditText
android:text="@={viewModel.twoWayText}"
/>
</LinearLayout>
</layout>
Two-Way data binding
classpath 'com.android.tools.build:gradle:2.1.0-alpha3'// or above
Views with Two-Way Binding support
• AbsListView -> android:selectedItemPosition
• CalendarView -> android:date
• CompoundButton -> android:checked
• DatePicker -> android:year, android:month, android:day
• NumberPicker -> android:value
• RadioGroup -> android:checkedButton
• RatingBar -> android:rating
• SeekBar -> android:progres
• TabHost -> android:currentTab
• TextView -> android:text
• TimePicker -> android:hour, android:minute
What about custom views?
NO PROBLEM!
Two-Way data binding
@InverseBindingAdapter(attribute = "color", event = "colorAttrChanged")
public static int getColor(ColorPickerView view)
{
return view.getColor();
}
attribute + AttrChanged
Activity
@BindingAdapter("colorAttrChanged")
public static void setColorListener(ColorPickerView view,
final InverseBindingListener colorChange)
{
if (colorChange == null)
{
view.setOnColorChangedListener(null);
}
else
{
view.setOnColorChangedListener(new OnColorChangedListener()
{
@Override
public void onColorChanged(int newColor)
{
colorChange.onChange();
}
});
}
}
Two-Way data binding
@BindingAdapter("color")
public static void setColor(ColorPickerView view, int color)
{
if (color != view.getColor())
{
view.setColor(color);
}
}
Avoiding cycles
Two-Way data binding
public class TwoWayViewModel extends BaseObservable
{
private int color;
public void setColor(int color)
{
this.color = color;
this.notifyPropertyChanged(BR.color);
}
@Bindable
public int getColor()
{
return this.color;
}
}
Two-Way data binding
public class TwoWayBindingActivity extends AppCompatActivity
{
private ActivityTwoWayBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_two_way);
binding.setViewModel(new TwoWayViewModel());
}
}
Two-Way data binding
<LinearLayout>
<com.github.danielnilsson9.colorpickerview.view.ColorPickerView
bind:color="@={viewModel.color}"
/>
<EditText
android:text="@={viewModel.color}"
/>
<Button
android:text="Set defined color"
android:onClick="@{() -> viewModel.setColor(Color.parseColor(`#C97249`))}"
/>
</LinearLayout>
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Special Variables
<TextView
android:id="@+id/tv_congrats"
/>
<Button
android:onClick="@{() -> clickHandler.clicked(tvCongrats)}"
/>
<TextView
android:text="@{TextService.load(context, myModel)}"
/>
Context
View IDs
Implied Event Updates
<CheckBox
android:id="@+id/cb_show_more"
/>
<TextView
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
Repeated expressions
<TextView
android:id="@+id/tv_congrats"
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
<TextView
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
<TextView
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
Repeated expressions
<TextView
android:id="@+id/tv_congrats"
android:visibility="@{cbShowMore.checked ? View.VISIBLE : View.GONE}"
/>
<TextView
android:visibility="@{tvCongrats.visibility}"
/>
<TextView
android:visibility="@{tvCongrats.visibility}"
/>
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Dos
• From time to time look at generated code
• Learn from already implemented bindings for framework views
• Move view operations to custom bindings as much as possible
• Try to use it together with MVVM design pattern
• Give it a chance!
Dos
• Use Data Binding for backward
compatibility!
Dos
• Always check if data binging library will work with your other libraries
(squidb won’t work )
Don’ts
• Don’t reinvent the wheel, on Github there are many ready to use
bindings
• Don’t forget about unit tests!
Don’ts
<EditText
android:layout_height="wrap_content"
android:hint="@string/hint_ticketNumber"
android:inputType="number"
android:layout_width="fill_parent"
android:text="@{viewModel.name == null?
String.format(viewModel.format, viewModel.surname, viewModel.nick) :
viewModel.name + viewModel.city}"
/>
Don’t move your business logic to xml layout
Just don’t!
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Say hello to
MVVM
MVVM & TDD
@Mock
ISendService sendService;
@Test
public void mainViewModel_sendAction_sendService_send()
{
final MainViewModel viewModel = new MainViewModel(sendService);
final String givenText = "my text";
viewModel.setTwoWayText(givenText);
viewModel.sendAction();
verify(sendService).send(givenText);
}
Basics
How it works?
Lambdas
Two-Way data binding
New stuff announced during Google IO 2016
Dos and don'ts
MVVM & TDD
Summary
Method count
• ~700 methods from databinding library
• n methods from your custom binding adapters, conversions etc.
• k methods from generated code for each layout xml with data binding
enabled
Summary
Cons
Compiler errors are sometimes not saying
too much
Still in beta
Documentation is not updated
May break other libraries (for example squidb)
Pros
Easy to start
Less boilerplate code
Code generation during compilation
Easy to integrate with custom views and
libraries
Really powerful
Officialy created and supported by Google
Android Team
Q&A
Q&A
https://github.com/radzio/DeepDiveIntoAndroidDataBinding
+RadoslawPiekarz
@radzio
Radosław Piekarz
Head of Mobile at Tango Agency

More Related Content

What's hot

Expressjs
ExpressjsExpressjs
Introduction to React JS
Introduction to React JSIntroduction to React JS
Introduction to React JS
Arno Lordkronos
 
Understanding react hooks
Understanding react hooksUnderstanding react hooks
Understanding react hooks
Samundra khatri
 
ReactJS presentation
ReactJS presentationReactJS presentation
ReactJS presentation
Thanh Tuong
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
Rob Quick
 
Introducing Drools
Introducing DroolsIntroducing Drools
Introducing DroolsMario Fusco
 
Reactjs
Reactjs Reactjs
Reactjs
Neha Sharma
 
Introduction to react_js
Introduction to react_jsIntroduction to react_js
Introduction to react_js
MicroPyramid .
 
NodeJS guide for beginners
NodeJS guide for beginnersNodeJS guide for beginners
NodeJS guide for beginners
Enoch Joshua
 
Ionic & Angular
Ionic & AngularIonic & Angular
Ionic & Angular
Knoldus Inc.
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
Divyang Bhambhani
 
AngularJS for Beginners
AngularJS for BeginnersAngularJS for Beginners
AngularJS for Beginners
Edureka!
 
React js
React jsReact js
Mobile Vue.js – From PWA to Native
Mobile Vue.js – From PWA to NativeMobile Vue.js – From PWA to Native
Mobile Vue.js – From PWA to Native
MartinSotirov
 
Express JS
Express JSExpress JS
Express JS
Designveloper
 
Introduction to ReactJS
Introduction to ReactJSIntroduction to ReactJS
Introduction to ReactJS
Hoang Long
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
Garrett Welson
 
Angular 8
Angular 8 Angular 8
Angular 8
Sunil OS
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation洪 鹏发
 
Introduction to thymeleaf
Introduction to thymeleafIntroduction to thymeleaf
Introduction to thymeleaf
NexThoughts Technologies
 

What's hot (20)

Expressjs
ExpressjsExpressjs
Expressjs
 
Introduction to React JS
Introduction to React JSIntroduction to React JS
Introduction to React JS
 
Understanding react hooks
Understanding react hooksUnderstanding react hooks
Understanding react hooks
 
ReactJS presentation
ReactJS presentationReactJS presentation
ReactJS presentation
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Introducing Drools
Introducing DroolsIntroducing Drools
Introducing Drools
 
Reactjs
Reactjs Reactjs
Reactjs
 
Introduction to react_js
Introduction to react_jsIntroduction to react_js
Introduction to react_js
 
NodeJS guide for beginners
NodeJS guide for beginnersNodeJS guide for beginners
NodeJS guide for beginners
 
Ionic & Angular
Ionic & AngularIonic & Angular
Ionic & Angular
 
React js - The Core Concepts
React js - The Core ConceptsReact js - The Core Concepts
React js - The Core Concepts
 
AngularJS for Beginners
AngularJS for BeginnersAngularJS for Beginners
AngularJS for Beginners
 
React js
React jsReact js
React js
 
Mobile Vue.js – From PWA to Native
Mobile Vue.js – From PWA to NativeMobile Vue.js – From PWA to Native
Mobile Vue.js – From PWA to Native
 
Express JS
Express JSExpress JS
Express JS
 
Introduction to ReactJS
Introduction to ReactJSIntroduction to ReactJS
Introduction to ReactJS
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
Angular 8
Angular 8 Angular 8
Angular 8
 
[Final] ReactJS presentation
[Final] ReactJS presentation[Final] ReactJS presentation
[Final] ReactJS presentation
 
Introduction to thymeleaf
Introduction to thymeleafIntroduction to thymeleaf
Introduction to thymeleaf
 

Viewers also liked

Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUK
Fabio Collini
 
Dominando o Data Binding no Android
Dominando o Data Binding no AndroidDominando o Data Binding no Android
Dominando o Data Binding no Android
Nelson Glauber Leal
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
Fabio Collini
 
Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~
Ken William
 
MVVM with DataBinding on android
MVVM with DataBinding on androidMVVM with DataBinding on android
MVVM with DataBinding on android
Rodrigo Bressan
 
Data binding w Androidzie
Data binding w AndroidzieData binding w Androidzie
Data binding w Androidzie
The Software House
 
Android Databinding Library
Android Databinding LibraryAndroid Databinding Library
Android Databinding Library
Takuji Nishibayashi
 
IPC: AIDL is not a curse
IPC: AIDL is not a curseIPC: AIDL is not a curse
IPC: AIDL is not a curse
Yonatan Levin
 
Data binding
Data bindingData binding
Data binding
Yonatan Levin
 
Android ipm 20110409
Android ipm 20110409Android ipm 20110409
Android ipm 20110409
Tetsuyuki Kobayashi
 
Long-read: assets and challenges of a (not so) emerging technology
Long-read: assets and challenges of a (not so) emerging technologyLong-read: assets and challenges of a (not so) emerging technology
Long-read: assets and challenges of a (not so) emerging technology
Claire Rioualen
 
Android Data Binding
Android Data BindingAndroid Data Binding
Android Data Binding
Ezequiel Zanetta
 
Dover ALS Safety Moment of the Week 20-Mar-2017
Dover ALS Safety Moment of the Week 20-Mar-2017Dover ALS Safety Moment of the Week 20-Mar-2017
Dover ALS Safety Moment of the Week 20-Mar-2017
albertaoiltool
 
Android MVVM
Android MVVMAndroid MVVM
Memory Leaks in Android Applications
Memory Leaks in Android ApplicationsMemory Leaks in Android Applications
Memory Leaks in Android Applications
Lokesh Ponnada
 
Android - Thread, Handler and AsyncTask
Android - Thread, Handler and AsyncTaskAndroid - Thread, Handler and AsyncTask
Android - Thread, Handler and AsyncTaskHoang Ngo
 
Process Management
Process ManagementProcess Management
Process Management
Roy Lee
 
Testable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVMTestable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVM
Fabio Collini
 
MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )
Ahmed Emad
 

Viewers also liked (20)

Android Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUKAndroid Data Binding in action using MVVM pattern - droidconUK
Android Data Binding in action using MVVM pattern - droidconUK
 
Dominando o Data Binding no Android
Dominando o Data Binding no AndroidDominando o Data Binding no Android
Dominando o Data Binding no Android
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
 
Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~
 
MVVM with DataBinding on android
MVVM with DataBinding on androidMVVM with DataBinding on android
MVVM with DataBinding on android
 
Data binding w Androidzie
Data binding w AndroidzieData binding w Androidzie
Data binding w Androidzie
 
Android Databinding Library
Android Databinding LibraryAndroid Databinding Library
Android Databinding Library
 
IPC: AIDL is not a curse
IPC: AIDL is not a curseIPC: AIDL is not a curse
IPC: AIDL is not a curse
 
Data binding
Data bindingData binding
Data binding
 
Android ipm 20110409
Android ipm 20110409Android ipm 20110409
Android ipm 20110409
 
Long-read: assets and challenges of a (not so) emerging technology
Long-read: assets and challenges of a (not so) emerging technologyLong-read: assets and challenges of a (not so) emerging technology
Long-read: assets and challenges of a (not so) emerging technology
 
Android Data Binding
Android Data BindingAndroid Data Binding
Android Data Binding
 
Dover ALS Safety Moment of the Week 20-Mar-2017
Dover ALS Safety Moment of the Week 20-Mar-2017Dover ALS Safety Moment of the Week 20-Mar-2017
Dover ALS Safety Moment of the Week 20-Mar-2017
 
Android MVVM
Android MVVMAndroid MVVM
Android MVVM
 
Memory Leaks in Android Applications
Memory Leaks in Android ApplicationsMemory Leaks in Android Applications
Memory Leaks in Android Applications
 
FFmpeg presentation
FFmpeg presentationFFmpeg presentation
FFmpeg presentation
 
Android - Thread, Handler and AsyncTask
Android - Thread, Handler and AsyncTaskAndroid - Thread, Handler and AsyncTask
Android - Thread, Handler and AsyncTask
 
Process Management
Process ManagementProcess Management
Process Management
 
Testable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVMTestable Android Apps using data binding and MVVM
Testable Android Apps using data binding and MVVM
 
MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )
 

Similar to Deep dive into Android Data Binding

Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
Infinum
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
Eric Maxwell
 
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
Inhacking
 
Data binding 入門淺談
Data binding 入門淺談Data binding 入門淺談
Data binding 入門淺談
awonwon
 
Knockoutjs databinding
Knockoutjs databindingKnockoutjs databinding
Knockoutjs databinding
Boulos Dib
 
Fundaments of Knockout js
Fundaments of Knockout jsFundaments of Knockout js
Fundaments of Knockout js
Flavius-Radu Demian
 
Knockoutjs
KnockoutjsKnockoutjs
How to use data binding in android
How to use data binding in androidHow to use data binding in android
How to use data binding in android
InnovationM
 
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
Bruno Salvatore Belluccia
 
SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!
Sébastien Levert
 
Data Binding - Android by Harin Trivedi
Data Binding - Android by Harin TrivediData Binding - Android by Harin Trivedi
Data Binding - Android by Harin Trivedi
harintrivedi
 
Unit5 Mobile Application Development.doc
Unit5 Mobile Application Development.docUnit5 Mobile Application Development.doc
Unit5 Mobile Application Development.doc
KNANTHINIMCA
 
Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)
Vladislav Ermolin
 
Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CN
jojule
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of usOSCON Byrum
 
Angular js
Angular jsAngular js
Angular js
ParmarAnisha
 
android design pattern
android design patternandroid design pattern
android design patternLucas Xu
 
Getting your app ready for android n
Getting your app ready for android nGetting your app ready for android n
Getting your app ready for android n
Sercan Yusuf
 

Similar to Deep dive into Android Data Binding (20)

Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
Infinum Android Talks #14 - Data binding to the rescue... or not (?) by Krist...
 
Effective Android Data Binding
Effective Android Data BindingEffective Android Data Binding
Effective Android Data Binding
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
 
Data binding 入門淺談
Data binding 入門淺談Data binding 入門淺談
Data binding 入門淺談
 
Knockoutjs databinding
Knockoutjs databindingKnockoutjs databinding
Knockoutjs databinding
 
Fundaments of Knockout js
Fundaments of Knockout jsFundaments of Knockout js
Fundaments of Knockout js
 
Knockoutjs
KnockoutjsKnockoutjs
Knockoutjs
 
How to use data binding in android
How to use data binding in androidHow to use data binding in android
How to use data binding in android
 
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
GDG Mediterranean Dev Fest Code lab #DevFestMed15 da android ad android wear ...
 
SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!SharePoint Conference 2018 - APIs, APIs everywhere!
SharePoint Conference 2018 - APIs, APIs everywhere!
 
Data Binding - Android by Harin Trivedi
Data Binding - Android by Harin TrivediData Binding - Android by Harin Trivedi
Data Binding - Android by Harin Trivedi
 
Unit5 Mobile Application Development.doc
Unit5 Mobile Application Development.docUnit5 Mobile Application Development.doc
Unit5 Mobile Application Development.doc
 
Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)Dialogs in Android MVVM (14.11.2019)
Dialogs in Android MVVM (14.11.2019)
 
Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CN
 
Big Data for each one of us
Big Data for each one of usBig Data for each one of us
Big Data for each one of us
 
Angular js
Angular jsAngular js
Angular js
 
Backbone Basics with Examples
Backbone Basics with ExamplesBackbone Basics with Examples
Backbone Basics with Examples
 
android design pattern
android design patternandroid design pattern
android design pattern
 
Getting your app ready for android n
Getting your app ready for android nGetting your app ready for android n
Getting your app ready for android n
 

Recently uploaded

Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
mz5nrf0n
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 

Recently uploaded (20)

Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 

Deep dive into Android Data Binding