안드로이드 데이터 바인딩에 대해 알아보자 #2

https://github.com/google-developer-training/android-kotlin-fundamentals-starter-apps/tree/master/AboutMeDataBinding-Starter

 

google-developer-training/android-kotlin-fundamentals-starter-apps

android-kotlin-fundamentals-starter-apps. Contribute to google-developer-training/android-kotlin-fundamentals-starter-apps development by creating an account on GitHub.

github.com

 

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()
   ...
}

댓글



Designed by JB FACTORY