안드로이드 데이터 바인딩에 대해 알아보자 #2
- archive
- 2019. 10. 17. 23:36
View에서 즉각적으로 사용 할 수 있는 Data 클래스를 만들어 봅시다. java 디렉토리에 MyName.kt를 생성합니다. name과 nickname을 가지는 MyName클래스를 정의하고, 각 변수의 Default값은 ""값으로 설정합니다.
data class MyName(var name: String = "", var nickname: String = "")
다음으로는 activity_main.xml파일을 엽니다. 그리고 <layout>과 <LinerLayout>사이에 <data></data>태그를 넣어 줍니다. 이 태그는 뷰와 데이터를 연결하는데 사용됩니다.
<data></data>태그 안에 <variable>태그를 추가합니다. 변수 이름을 정의 하도록 name 파라미터와 type파라미터를 추가해 줍니다. type파라미터는 위에서 정의한 MyName 클래스의 위치를 말합니다.
<data>
<variable
name="myName"
type="com.example.android.aboutme.MyName" />
</data>
이렇게 정의 했다면 name_text의 text값을 바인딩 된 데이터로 바꾸어 봅시다. 우리가 정의한 MyName클래스를 layout xml상에서 가져와 사용할 수 있습니다.
android:text="@={myName.name}
자, 이제 코틀린 코드상에서 해당 데이터를 생성해 봅시다. onCreate()위에 private변수 myName을 하나 추가해 줍니다. 위에서 정의한 MyName 데이터 클래스의 형태를 따르면 name은 "Aleks Haecky", nickname은 ""가 되겠네요.
private val myName: MyName = MyName("Aleks Haecky")
onCreate()함수 안에서 위에서 생성한 myName 변수를 layout파일 에서 생성한 변수인 myName에 셋팅해 주어야 합니다. 이것은 저번에 생성한 binding변수를 사용합니다.
binding.myName = myName
그러면 nickname같은 경우는 ""로 처음 정의 된 후 사용자가 나중에 바꿀 수 있는데, 이러한 경우는 어떻게 해야 할까요? 저번에 정의한 addNickName함수에서는 다음과 같이 처리하고 있습니다.
nicknameText.text = binding.nicknameEdit.text.toString()
데이터 바인딩을 사용하면 위에 정의한 myName함수의 nickname를 바꿔서 셋팅한 후 invalidateAll()을 호출해 주면 됩니다.
binding.apply {
myName?.nickname = nicknameEdit.text.toString()
invalidateAll()
...
}
'archive' 카테고리의 다른 글
Conditional Navigation 조건에 맞춰 Navigation을 해보자. (0) | 2019.11.04 |
---|---|
안드로이드 Navigation Components로 Fragment들을 전환해 보자. (0) | 2019.11.02 |
안드로이드 데이터 바인딩에 대해 알아보자 #1 (0) | 2019.10.16 |
티스토리 코드블럭 색상 설정 하기 (0) | 2019.08.10 |
[코틀린 Kotlin] Lists, Set, Maps (0) | 2019.08.10 |