data binding

45
Data Binding

Upload: yonatan-levin

Post on 08-Jan-2017

225 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Data binding

Data Binding

Page 2: Data binding

Who we are?

Leonid Olevsky

[email protected]

Yonatan Levin

[email protected]

Android Academy

Page 3: Data binding
Page 4: Data binding

TodayfindViewByIdCoordinates between the model and the views

Create untestable codeAnd more...

Page 5: Data binding

What is Data Binding?Model View ViewModel (MVVM)

Ongoing link between an element in the user interface and a value

When a variable’s value is updated, the display on the user’s screen changes automatically

Page 6: Data binding

DependenciesIt's a support library - Android 2.1 (API level 7+)

Gradle 1.3.0-beta4 or higher is required

Beta release

Page 7: Data binding

DependenciesIn a top-level build.gradle add

In each module

Page 8: Data binding

Simple usage - Binding Data

Page 9: Data binding

Simple usage - Binding Data

Page 10: Data binding
Page 11: Data binding

Simple usage - Binding DataThe magic

Other option

Page 12: Data binding

Simple usage - Binding Events

Page 13: Data binding

More optionsUse imports

Alies

Page 14: Data binding

More optionsReferencing static fields and methods in expressions

Page 15: Data binding

More options - include

Page 16: Data binding

Expression LanguageMathematical + - / * %String concatenation +Logical && ||Binary & | ^Unary + - ! ~Shift >> >>> <<Comparison == > < >=

<=instanceofGrouping ()

Literals - character, String, numeric, null

CastMethod callsField accessArray access []Ternary operator ?:

Page 17: Data binding

Expression LanguageNot supported

thissupernewExplicit generic invocation

Page 18: Data binding

ObservableObservable Objects

listen for changes of all properties on that object

ObservableFieldslisten for changes of a field of that object

Observable Collectionslisten for changes on dynamic structures to

hold data

Page 19: Data binding

Observable Objects

Page 20: Data binding

ObservableFields

Page 21: Data binding

Observable CollectionsObservableArrayMap ObservableArrayList

Page 22: Data binding

Further Readingdeveloper.android.com/tools/data-binding/guide.html

Page 23: Data binding

Our app

Page 24: Data binding

ArchitectureStarwarsActivi

ty

CrawlLoader OpeningCrawl

mCrawlLoader.startLoading()

new OpeningCrawl

onLoadFinishListener.onLoadFinish(openingCrawl)

Every ~5 seconds

findViewById(R.id.asw_tv_episode);findViewById(R.id.asw_tv_crawl);

mEpisodeTextView.setText(...);mCrawlTextView.setText(...);mCrawlTextView.startAnimation();

Page 25: Data binding

Data Binding could be the mess

Page 26: Data binding

Downside- Define stuff in XML- Not debuggable- XML not unit tested- Run-time errors instead compile time- Bad IDE support

Page 27: Data binding

MVP - The Best Simple Friend

Page 28: Data binding

Why MVP?- Decoupled layers

- Easy to debug

- Fully testable business logic, data model

Page 29: Data binding

MVP vs DataBindingPresenter react on what happen in the view, retrieves data, formats and display back in the viewData Binding will take over the main responsibilities of the presenter (react and display). Rest - will go to the enhanced Model - ViewModel

Page 30: Data binding

MVVM

https://en.wikipedia.org/wiki/Model_View_ViewModel

Page 31: Data binding

MVVM ArchitectureStarwarsActivity

CrawlLoader OpeningCrawl

mCrawlLoader.startLoading()

new OpeningCrawl

onLoadFinishListener.onLoadFinish(openingCrawl)

Every ~5 seconds

StarWarsViewModel

Data Binding

Page 32: Data binding

Code

https://github.com/parahall/StarWarsDataBinding.git

Page 33: Data binding

Layout - ActivityStarWars.xml

Page 34: Data binding

Layout - ActivityStarWars.xml

Page 35: Data binding

StarWarsActivity

Page 36: Data binding

StarWarsActivity - no leak

Page 37: Data binding

StarWarsActivity - callbacks

Page 38: Data binding

StarWarsViewModel

Page 39: Data binding

StarWarsViewModel - react

Page 40: Data binding

StarWarsViewModel - retrieve

Page 41: Data binding

StarWarsViewModel - decide

* runOnUiThread - might be avoided using OttoBus event

Page 42: Data binding

CrawlLoader

Page 43: Data binding

So what we got?

Clean Debuggable codeDecoupled layerFully testable UI logic

Fun :)

Page 44: Data binding

Q?

Page 45: Data binding

Thank you!

Leonid Olevsky

[email protected]

Yonatan Levin

[email protected]

Android Academy