뷰 결합(View Binding)이란
- 뷰와 상호작용하는 코드를 쉽게 작성하기 위한 방법 -
이벤트리스너와 같이 뷰와 관련된 코드를 작성하기 위해서는 findViewById를 사용하는 것이 가장 기본이다. 그러나 모바일 앱 특성상 뷰와 관련된 코드가 많을 수 밖에 없기 때문에 findViewById의 반복적인 작업을 제거하기 위해 그동안 'kotlin-android-extensions'라는 기본 플러그인이 사용되어왔다.
import kotlinx.android.synthetic.main.activity_main.*
안드로이드 코틀린 강의나 다른 게시글들에서 위와 같은 코드가 포함되어있다면 이는 'kotlin-android-extensions'라는 플러그인이 사용되고 있다는 것이며, 이 경우 View Id를 코드내에 그대로 언급이 가능하다.
그러나 이러한 방법은 실수나 불편함을 야기하였으며, 런타임 및 RecyclerView에서도 오류를 불러왔기에 안드로이드 스튜디오 4.1버전에서부터는 기본 플러그인에서 제거되었으며 뷰와 상호작용하기 위해서는 ViewBinding이 기본이 되었다.
뷰 결합 사용법
1. 모듈 사용 설정
2. 활동에서 뷰 결합 사용 준비
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
}
3. 활동에서 뷰 결합 사용 예
- ViewBinding 사용시:
package com.example.test_ftp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.test_ftp.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.btnSay.setOnClickListener {
binding.textView.text = "Hello, Kotlin!"
}
}
}
* 아래는 기존 강의나 게시글들에서 사용된 방법에서 어떤식으로 변화하였는지 참고용으로 작성한 것이므로 사용하지 않을 것을 권장드립니다. 'kotlin-android-extensions' 플러그인 사용시 예제의 경우 실제 작동하는지 확인은 안 해봤습니다.
- findViewById 사용시:
package com.example.test_ftp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var btnSay = findViewById<Button>(R.id.btnSay)
var textView = findViewById<TextView>(R.id.textView)
btnSay.setOnClickListener {
textView.text = "Hello, Kotlin!"
}
}
}
- 'kotlin-android-extensions' 플러그인 사용시
package com.example.test_ftp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnSay.setOnClickListener {
textView.text = "Hello, Kotlin!"
}
}
}