안드로이드 데이터 바인딩에 대해 알아보자 #1
- archive
- 2019. 10. 16. 22:47
데이터 바인딩을 사용히랴면 build.gradle에 다음과 같이 설정 해 줍니다. android 내부 영역에 데이터 바인딩을 이용하겠다고 설정만 해주면 됩니다.
android {
dataBinding {
enabled = true
}
}
그 다음에는 XML 파일을 <layout> 태그로 감싸줍니다. xmls:android와 xmls:app은 LinearLayout에 있던걸 복사해서 넣어 줍니다.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout>
</LinearLayout>
</layout>
이제 Activity로 이동하여 Binding 객체를 만들어 줍니다. 아래와 같이 ActivityMainBinding 변수를 선언합니다.
private lateinit var binding: ActivityMainBinding
ActivityMainBinding클래스는 라이브러리에서 제공하는 클래스도 아니고, 개발자가 작성한 클래스도 아닙니다. <layout> 태그로 선언 된 XML을 위해 자동으로 만들어지는 클래스 입니다. ActivityMainBinding은 activity_main + Binding 입니다. 또 다른 예시로 XML 파일명이 aa.xml이라면 AaBinding이라는 클래스가 자동으로 만들어 집니다.
이제 onCreate()안의 setContentView()대신에 DataBindingUtil.setContentView()를 사용해 봅시다. activity_main과 MainActivity를 연결 시키기 위해 사용했던 setContentView()대신 DataBindingUtil.setContentView()을 사용하는 것 입니다.
onCreate()안의 setContentView()를 지우고 아래와 같이 위의 선언했던 binding변수에 DataBindingUtil.setContentView()리턴 값을 할당 해 줍니다.
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
그 후에 done_button 이라는 id를 가진 button에 onClickListener를 달아줍니다.
binding.doneButton.setOnClickListener {
addNickname(it)
}
addNickname()이라는 함수는 원래 아래와 같이 findViewById를 사용 하였습니다. 이 코드를 binding을 이용해서 고쳐 보겠습니다.
private fun addNickname(view: View) {
val editText = findViewById<EditText>(R.id.nickname_edit)
val nicknameTextView = findViewById<TextView>(R.id.nickname_text)
nicknameTextView.text = editText.text
editText.visibility = View.GONE
view.visibility = View.GONE
nicknameTextView.visibility = View.VISIBLE
// Hide the keyboard.
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
아래와 같이 binding을 사용해서 addNickName()함수를 변경한 모습입니다. 아래 코드는 코틀린의 apply를 사용해서 좀 더 간결한 하게 만들 수 있습니다.
private fun addNickname(view: View) {
binding.nicknameText.text = binding.nicknameEdit.text.toString()
binding.nicknameEdit.visibility = View.GONE
binding.doneButton.visibility = View.GONE
binding.nicknameText.visibility = View.VISIBLE
// Hide the keyboard.
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
binding.apply {
nicknameText.text = binding.nicknameEdit.text.toString()
nicknameEdit.visibility = View.GONE
doneButton.visibility = View.GONE
nicknameText.visibility = View.VISIBLE
}
'archive' 카테고리의 다른 글
안드로이드 Navigation Components로 Fragment들을 전환해 보자. (0) | 2019.11.02 |
---|---|
안드로이드 데이터 바인딩에 대해 알아보자 #2 (0) | 2019.10.17 |
티스토리 코드블럭 색상 설정 하기 (0) | 2019.08.10 |
[코틀린 Kotlin] Lists, Set, Maps (0) | 2019.08.10 |
[코틀린 Kotlin] 배열 (0) | 2019.08.10 |