Top Banner
Android Data Binding Library Takuji Nishibayashi
36

Android Databinding Library

Aug 10, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Android Databinding Library

Android'Data'Binding'LibraryTakuji'Nishibayashi

Page 2: Android Databinding Library

About&me• Takuji(Nishibayashi

• @takuji31

• Fenrir(Inc.

• Nintendo(Network(ID(available!!!

• Udemae:(BD(/(Rank:(20

Page 3: Android Databinding Library

About&me• Android(engineer((2010/02~)

• Loves(Kotlin

• Interest(RoboVM

Page 4: Android Databinding Library

Data$Binding

Page 5: Android Databinding Library

android'binding

Page 6: Android Databinding Library

Not$ac've$!

Page 7: Android Databinding Library

RoboBinding

Page 8: Android Databinding Library

Not$work$with$AppCompat$!

Page 9: Android Databinding Library

RxBinding

Page 10: Android Databinding Library

Not$tested...

Page 11: Android Databinding Library

One$way(only

Page 12: Android Databinding Library

Code%only

Page 13: Android Databinding Library

Xamarin'+'MvvmCross'/'Forms'etc.

Page 14: Android Databinding Library

Cool

Page 15: Android Databinding Library

Cross%pla)orm%!!!

Page 16: Android Databinding Library

but$..

Page 17: Android Databinding Library

Too#expensive#for#private#development

Page 18: Android Databinding Library

DIY!

Page 19: Android Databinding Library

Next%day

Page 20: Android Databinding Library

Google&I/O&2015

Page 21: Android Databinding Library

Android'Data'Binding'Library

Page 22: Android Databinding Library

!

Page 23: Android Databinding Library

Usage

Page 24: Android Databinding Library

build.gradlebuildscript { repositories { jcenter() } dependencies { classpath "com.android.tools.build:gradle:1.3.0-beta1" classpath "com.android.databinding:dataBinder:1.0-rc1" }}

Page 25: Android Databinding Library

build.gradle

apply plugin: 'com.android.application'apply plugin: 'com.android.databinding'

Page 26: Android Databinding Library

View%modelpublic class ViewModel extends BaseObservable { @Bindable public String getFirstName() {} @Bindable public String getLastName() {} @Bindable public OffsetDateTime getLastUpdated() {}

public void setFirstName(String firstName) { this.firstName = firstName; notifyPropertyChanged(BR.firstName); } public void setLastName(String lastName) { this.lastName = lastName; notifyPropertyChanged(BR.lastName); } public void setLastUpdated(OffsetDateTime lastUpdated) { this.lastUpdated = lastUpdated; notifyPropertyChanged(BR.lastUpdated); }}

Page 27: Android Databinding Library

Converterpublic class Converters { @BindingConversion public static String convertOffsetDateTime(OffsetDateTime dateTime) { return dateTime != null ? dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME) : ""; }

private Converters() {}}

Page 28: Android Databinding Library

Layout'XML<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <data> <variable name="viewModel" type="jp.takuji31.databindingexample.ViewModel" /> </data> <!-- ... -->

<TextView android:text="@{viewModel.firstName + ' ' + viewModel.lastName}" /> <TextView android:text="@{viewModel.lastUpdated}" /> <!-- ... --></layout>

Page 29: Android Databinding Library

Ac#vity//onCreateActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);binding.setViewModel(viewModel);binding.firstNameEditText.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { viewModel.setFirstName(s.toString()); }});binding.lastNameEditText.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { viewModel.setLastName(s.toString()); }});binding.submitButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { viewModel.setLastUpdated(OffsetDateTime.now()); }});

Page 30: Android Databinding Library

Run

Page 31: Android Databinding Library

Good• Auto&data&binding&more&less&codes

• Support&most&Android&version&(2.1~)

• Binding&adapter

• Converter

Page 32: Android Databinding Library

Good• Expression+support

• No+more+findViewById!

• No+more+ViewHolder!

Page 33: Android Databinding Library

Bad• One%way%binding%only!

• Supported%future?

• Unstable%support%(Android%Studio)

• development%in%progress

• Cannot%use%Kotlin%(Kotlin%M11%used%internally)

Page 34: Android Databinding Library

Example

Page 35: Android Databinding Library

github.com/takuji31/databinding3example

Page 36: Android Databinding Library

Thank&you!