😎
【Android】DataBinding で拡張関数とプロパティを使う
DataBinding
で拡張関数・プロパティを使うときに少しハマったので、メモとして残します。
拡張関数・プロパティを定義したオブジェクトを import する
簡単な拡張関数・プロパティを定義してみます。
User.kt
data class User(
val id: Int,
val name: String,
val age: Int
)
fun User.toName() = "名前は${name}です"
val User.ageToText: String
get() = "年齢は${age}歳です"
fragment_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable
name="user"
type="com.example.sample.User" />
<!-- 拡張関数・プロパティを使うときは、これが必要 -->
<!-- [拡張したオブジェクト名]Ktという名前になっている -->
<import type="com.example.sample.UserKt" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- 引数には拡張したオブジェクトを渡す -->
<TextView
android:id="@+id/user_name"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:gravity="center"
android:text="@{UserKt.toName(user)}"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="@tools:sample/full_names" />
<TextView
android:id="@+id/user_age"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:gravity="center"
android:text="@{UserKt.getAgeToText(user)}"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/user_name"
tools:text="@tools:sample/full_names" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Discussion