-
[Android] 뷰 바인딩(View Binding)Android 2024. 4. 11. 21:03
우리는 기존에 액티비티에서 xml 로부터 뷰를 참조할때 findViewById 를 이용해왔다.
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout ... tools:context=".MainActivity"> <TextView android:id="@+id/myTextView" ... app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/myButton" ... app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/myTextView" /> </androidx.constraintlayout.widget.ConstraintLayout>
Button 을 누르면 해당 TextView 가 "버튼이 눌렸습니다!" 로 바꿔보는 기존 코틀린 코드는 아래와 같다.
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val btn = findViewById<Button>(R.id.myButton) val mytext = findViewById<TextView>(R.id.myTextView) btn.setOnClickListener { mytext.text = "버튼이 눌렸습니다!" } } }
매번 xml 파일로부터 뷰를 가져올때 findViewById 속성을 써야하고, 뷰 위젯의 타입도 같이 가져와야한다.
이러한 귀찮음을 해결한 것이 바로 뷰 바인딩(View Binding) !!!
뷰 바인딩의 기본 세팅은 다음과 같다.
// 방법1 class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) } }
만약에 레이아웃 파일이 activity_main.xml 이면 언더바 빼고, 각 단어의 앞글자를 대문자로 가져오고 뒤에 binding을 붙여 바인딩 이름을 만든다. (AcitivtyMainBinding)
// 방법2 class MainActivity : AppCompatActivity() { private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) } }
상수에 사용하는 by lazy로 지연초기화를 해주면 한줄안에 작성가능하다! (후자가 더 편한 것 같다)
이후 생성한 바인딩으로 xml 파일의 뷰 위젯을 전보다 더 편하게 가져올 수 있다.
... setContentView(binding.root) binding.myButton.setOnClickListener { binding.myTextView.text = "버튼이 눌렸습니다!" }
'Android' 카테고리의 다른 글
[Android] RecyclerView (0) 2024.04.15 [과제] 스탠다드반 3주차 특별과제 정리 (0) 2024.04.12 [문법] Activity에서 Fragment를 화면에 나타내기 (0) 2024.04.08 [협업] 팀원 레포지토리를 내 깃허브로 가져오는법 (0) 2024.04.05 [UI] Dark 모드 구현해보기 (0) 2024.04.04