Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin & Android Data Binding Library
Search
Takuji Nishibayashi
March 30, 2016
Technology
3.4k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin & Android Data Binding Library
Takuji Nishibayashi
March 30, 2016
More Decks by Takuji Nishibayashi
See All by Takuji Nishibayashi
compose-hot-reload を試そうとした話
takuji31
0
170
CameraX使ってみた
takuji31
0
320
kotlinx.datetime 使ってみた
takuji31
0
1.1k
HiltのCustom Componentについて
takuji31
0
390
java.timeをAndroidで使う
takuji31
0
210
KSPを使ってコード生成
takuji31
0
490
Kotlin Symbol Processing API (KSP) を使って Kotlin ア プリケーションの開発を効率化する
takuji31
1
3.2k
kotlinx.serialization
takuji31
0
710
kanmoba-returns-02.pdf
takuji31
0
300
Other Decks in Technology
See All in Technology
enechainの内製セルフサービスプラットフォーム
hiyosi
0
120
Sigmaユーザーのための有用リソース一挙公開 & Sigmaで使えるMCP #sigma_ucj /useful-resources-for-sigma-computing-users-and-mcps-with-sigma
shinyaa31
0
130
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
3
780
JAWS-UG初心者支部#88わいわい初心塾(夏休みの宿題やったかGit編)
otsuki
0
150
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
140
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
2
240
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
370
Backstageでつくるセルフサービスな社内開発基盤
kikunosuke75
1
340
PM領域でのAI Agentの活用
lycorptech_jp
PRO
0
270
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
2
1.7k
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
840
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Navigating Weather and Climate Data
rabernat
0
510
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Leo the Paperboy
mayatellez
8
2.2k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
Joys of Absence: A Defence of Solitary Play
codingconduct
1
480
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
820
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
Rails Girls Zürich Keynote
gr2m
96
14k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
330
Transcript
Kotlin & Android Data Binding Library @takuji31
@takuji31 (Takuji Nishibayashi) Application Engineer at Hatena
Loves Kotlin
Kotlin 1.0.1-2 released
Android Data Binding Library
Official binding library for Android
Android Studio support
One way binding support
Two way binding support latest version
Can use with Kotlin
Define binding using layout XML
Auto generate binding class
Define binding <layout> <data> <import type="android.view.View" /> <variable name=“user" type="jp.takuji31.kotlindatabinding.DataClassActivity.User"
/> <variable name=“randomButtonClickListener” type="android.view.View.OnClickListener" /> </data> <RelativeLayout> <TextView android:text="Name : "/> <TextView android:text="@{user.name}" tools:text="namename" /> <TextView android:text="Birthday : " android:visibility="@{user.birthDay != null ? View.VISIBLE : View.GONE}" /> <TextView android:text=“@{user.birthDay}" tools:text="1970/01/01" android:visibility="@{user.birthDay != null ? View.VISIBLE : View.GONE}” /> <Button android:onClick="@{randomButtonClickListener}"/> </RelativeLayout> </layout>
Using binding class DataClassActivity : AppCompatActivity() { data class User(val
name: String, val birthDay: String?) var users = listOf( User(name = "takuji31", birthDay = "1987/03/01"), User(name = "takuji32", birthDay = "1987/03/02"), User(name = "takuji33", birthDay = "1987/03/03"), User(name = "takuji24884", birthDay = null) ) val binding: ActivityDataClassBinding by lazy { DataBindingUtil.setContentView<ActivityDataClassBinding>(this, R.layout.activity_data_class) } override fun onCreate(savedInstanceState: Bundle?) { binding.user = users.last() binding.randomButtonClickListener = View.OnClickListener { binding.user = users[0] users = users.drop(1) + binding.user } } }
No more (ViewClass)findById(R.id.viewId)
Define binding <layout> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent"/> </layout>
Field access class MainActivity : AppCompatActivity() { val binding :
ActivityMainBinding by lazy {DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)} override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.recyclerView.layoutManager = LinearLayoutManager(this) } }
Property observer
Observable data class class Counter : BaseObservable() { @get:Bindable var
count : Int = 0 set(value) { field = value notifyPropertyChanged(BR.count) } }
Define binding <layout> <data> <variable name=“counter" type=“…PropertyObserverActivity.Counter” /> <variable name="buttonClickListener"
type="android.view.View.OnClickListener" /> </data> <LinearLayout> <TextView android:text="@{@string/count_format(counter.count)}"/> <Button android:onClick=“@{buttonClickListener}" /> </LinearLayout> </layout>
Change value class PropertyObserverActivity : AppCompatActivity() { val binding :
ActivityPropertyObserverBinding by lazy { DataBindingUtil.setContentView( this, R.layout.activity_property_observer ) } override fun onCreate(savedInstanceState: Bundle?) { val counter = Counter() binding.counter = counter binding.buttonClickListener = View.OnClickListener { counter.count += 1 } } }
Binding adapter
Define binding adapter object Adapters { @JvmStatic @BindingAdapter("android:text") fun convertZonedDateTimeToString
(textView: TextView, zonedDateTime : ZonedDateTime) { val timeString = zonedDateTime.format( DateTimeFormatter.ofPattern("yyyy/MM/dd/ HH:mm:SS")) textView.text = timeString } }
Value converter
Issues with Kotlin
Can’t find converter written with Kotlin
Use Java
example : github.com/ takuji31/KotlinDataBinding
Enjoy Data Binding Life