728x90
안녕하세요.
이번 포스팅에서는 안드로이드 프래그먼트에서의 뷰바인딩 구현을 진행해 보겠습니다.
언어: 코틀린
sdk vsersion
- compile: 33
- min: 21
- target: 33
바인딩 진행 전 사전 준비 작업입니다.
가장 먼저 build.gradle에 viewBinding true를 선언해 줍니다.
build.gradle(:app)
android {
...
buildFeatures {
viewBinding true
}
...
}
바인딩을 진행할 Fragment를 생성한 뒤 아래와 같이 수정해 줍니다.
ViewBindingFragment.kt
class ViewBindingFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_view_binding, container, false)
}
override fun onDestroyView() {
super.onDestroyView()
}
}
이제부터 뷰바인딩을 적용해 보겠습니다.
ViewBindingFragment.kt
class ViewBindingFragment : Fragment() {
private var _binding: FragmentViewBindingBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentViewBindingBinding.inflate(layoutInflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
간단하게 이렇게 하면 뷰바인딩 구현이 끝납니다.
FragmentViewBindingBinding은 fragment_view_binding.xml layout에서 이름을 따옵니다.
만약 layout xml 이름이 my_fragment.xml이라면,
- private var _binding: MyFragmentBinding? = null
이런식으로 바인딩을 진행해 주면 되겠습니다.
바인딩 된 뷰를 참조하여 실질적인 동작을 구현해 보겠습니다.
두 개의 버튼이 있고, 누르는 버튼에 따라 텍스트가 변합니다.
fragment_view_binding.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ViewBindingFragment">
<Button
android:id="@+id/this_is_first_button_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:text="버튼1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/this_is_second_button_view"
app:layout_constraintBottom_toBottomOf="parent"/>
<Button
android:id="@+id/this_is_second_button_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:text="버튼2"
app:layout_constraintStart_toEndOf="@id/this_is_first_button_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<TextView
android:id="@+id/this_is_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello view binding fragment"
android:textSize="24sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
ViewBindingFragment.kt
class ViewBindingFragment : Fragment() {
private var _binding: FragmentViewBindingBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentViewBindingBinding.inflate(layoutInflater, container, false)
binding.thisIsFirstButtonView.setOnClickListener {
firstButtonClicked()
}
binding.thisIsSecondButtonView.setOnClickListener {
secondButtonClicked()
}
return binding.root
}
private fun firstButtonClicked() {
binding.thisIsTextView.text = "1) 첫 번째 버튼 클릭"
}
private fun secondButtonClicked() {
binding.thisIsTextView.text = "2) 두 번째 버튼 클릭"
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
binding.viewId 형태로 뷰를 참조할 수 있습니다.
에뮬레이터에서 실행해 보겠습니다.
의도한 대로 잘 동작합니다.
추가로 액티비티에서의 뷰바인딩 코드도 올려봅니다.
MainActivity.kt
class MainActivity : AppCompatActivity() {
private var _binding: ActivityMainBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.thisIsFirstButtonView.setOnClickListener {
...
}
}
}
이상 포스팅을 마치겠습니다.
감사합니다.
728x90
'Android Application > 기초 사용법' 카테고리의 다른 글
안드로이드 데이터바인딩(dataBinding) 사용 (0) | 2023.03.29 |
---|---|
안드로이드 뷰모델(ViewModel) 사용하기(with LiveData) (0) | 2023.03.28 |
안드로이드 - Navigation(with bottom tab) 구현 (0) | 2023.03.25 |
사용자 인터페이스 (User Interface) (0) | 2020.03.27 |
안드로이드 애플리케이션 (Android Application) (0) | 2020.03.26 |
댓글