sitelink1 | https://blog.naver.com/sm46384638/222926828305 |
---|---|
sitelink2 | |
sitelink3 |
Viewbinding 이란?
View와 상호작용하는 코드를 쉽고 간결하게 작성할수있는 것을 말한다.
Viewbinding은 findViewById을 대체할수있는 기능이다.
Viewbinding이 나오게 된 이유
안드로이드 스튜디오 3.5 버전 까지는 xml 파일의 view에 접근할때 findViewById을 많이 사용해 왔다.
하지만 view 하나 하나씩 접근해서 연결해주어야 해서 view가 많아 질수록 코드가 지저분해지고 불편함을 주었다.
이 문제점을 해결해주기 위해 나오게 된게 View binding !!
View binding을 사용하면 모듈에 있는 각 XML 레이아웃 파일에 대해
자동으로 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함된 바인딩 클래스를 생성해주기 때문에
이것을 이용하면 코드의 가독성이 상당히 개선되게 된다.
뷰 바인딩의 장점
● Null-safe : 뷰 바인딩은 서로 다른 레이아웃의 같은 Id를 가진 View를 정확히 구분할 수 있다.
그럴 수 없는 경우에는 @Nullable로 만들어 사용할 수 없도록 한다.(NullPointerException을 막을 수 있다.)
● Type-safe : findViewById()를 사용할 경우 View에 잘못된 타입을 지정할 우려가 있으나,
뷰 바인딩을 사용할 경우에는 해당 문제가 발생하지 않는다.
Viewbinding 사용법
1. App 수준의 Gradle 에서 viewbinding을 설치 해준다.
android { buildFeatures { viewBinding = true } }
2. Activity 사용
class MainActivity : AppCompatActivity() { private lateinit var binding : ActivityMainBinding // 뷰 바인딩 1 override fun onCreate(savedInstanceState: Bundle?) { binding = ActivityMainBinding.inflate(layoutInflater) // 2 setContentView(binding.root) // 3 binding.name(xmlid값).setText("ji") // 4 binding.number(xmlid값).setText("1234") } }
2-1 자동으로 생성된 바인딩 클래스 이름은 규칙이 있긴 때문에 규칙에 맞게 사용해주어야한다.
ex)
-
button_activity.xml => buttonActivityBinding
-
seung_activity.xml => seungActivityBinding
2-2 inflate 함수를 이용하여 xml에 표기된 레이아웃들을 객체화 시켜준다.
즉, layout에 그때 그때 다른 layout을 집어 넣을 수 있다는 있다는 것
2-3 setContentView(binding.root)
Root View 를 setContentView() 에 전달하여 화면 상의 View로 만든다.
binding.root 란 호출 시 xml에 있는 constraintlayout의 root view를 반환 한다는 의미인데
즉, 이 과정을 겪으면서 해당 레이아웃에 있는 id만 사용할 수 있게 되어 다른 레이아웃에 있는 동일안 이름의 id와 헷갈릴 일이 없어진다.
2-4 바인딩 클래스의 View들 사용가능
binding.(XML Id값).setText("입력할 말"),
binding.button.setOnClickListener { viewModel.userClicked() }