Android + Kotlin + DataBinding
10834 단어 AndroidKotlinDataBinding
Kotlin Android Extensions
감동을쓰면친구에게DataBinding
최근안드로이드 프로젝트에서일반적으로사용한다는 것을배웠으니써보자.환경
Android Studio 3.1.2
데이터 바인딩이란 무엇입니까
ViewModel
, 값을 변경하면 xml
의 속성에 자동으로 액세스할 수 있습니다.Activity
중 View
에 대한 방문을 낙서하지 않아 원활한 관리가 쉽다.반대로 속성이 변하면 ViewModel
의 값도 바꿀 수 있다.간단한 샘플을 만들어 보도록 하겠습니다.
이번에는
View
의TextView
의text
와ViewModel
의name
를 연결시키고 싶습니다.MyAppA
라는 이름으로 프로젝트를 했다면 build.gradle
중 두 곳을 추가한다.app/build.gradle
apply plugin: 'kotlin-kapt' // ここを追記
android {
...
// ここを追記
dataBinding {
enabled = true
}
}
이어viewmodel 폴더를 만들고 MainViewModel
클래스를 만듭니다.MainViewModel.kt
package com.funeasysoft.myappa.viewmodel
class MainViewModel {
var name = "funeasy"
}
링크된 xml 파일을 편집합니다.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.funeasysoft.myappa.viewmodel.MainViewModel" />
</data>
<android.support.constraint.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.name}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</layout>
원래 레이아웃을 <Layout>
로 둘러싸고, 추가<data>
ViewModel 클래스를 지정합니다.한편 이번에는 TextView
의text
와dataBinding을 진행하기 위해 android:text="@{viewModel.name}"
로 설정했다.여기에서 주의해야 할 것은 원래
ConstraintLayout
에 첨부되어 있다xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
꺼야 돼.삭제하지 않으면 다음과 같은 오류가 발생합니다.
error: duplicate attribute.
Message{kind=ERROR, text=error: duplicate attribute., sources=[/Users/masa/DevAndroid/MyAppA/app/src/main/res/layout/activity_main.xml:13], original message=, tool name=Optional.of(AAPT)}
마지막으로 관련Activity
.MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main) // コメントアウト
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
binding.viewModel = MainViewModel()
}
실행 후 화면에 MainViewModel
클래스 name
의 funeasy
가 표시됩니다.버튼 클릭 -> TextView 변경
buttonClicked()
.또한viewModel.이름을 ObservableField("[初期値]")
로 변경하여 표시를 변경합니다.MainViewModel.kt
package com.funeasysoft.myappa.viewmodel
import android.databinding.ObservableField
class MainViewModel {
var name = ObservableField("funeasy")
fun buttonClicked() {
name.set("Button clicked!")
}
}
추가Button
, 설정android:onClick="@{() -> viewModel.buttonClicked()}"
.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<data>
<variable
name="viewModel"
type="com.funeasysoft.myappa.viewmodel.MainViewModel" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@{viewModel.name}"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Button"
android:onClick="@{() -> viewModel.buttonClicked()}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</android.support.constraint.ConstraintLayout>
</layout>
버튼을 누르면 텍스트가 확실히 변경됩니다!앞으로 나는 각양각색
MainViewModel
을 맞춤형으로 만들어서 얼마나 가벼워질지 보고 싶다.
Reference
이 문제에 관하여(Android + Kotlin + DataBinding), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/funeasy-soft/items/ab5fc3f8f770a91adc25텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)