바인딩을 안해도 안드로이드 개발에 문제없다
그럼 왜 바인딩을 하나?
일단 뷰바인딩은 findViewById 로 하나하나 변수를 선언해주는 걸 줄여준다
데이터바인딩은 xml 에서 데이터를 직접 매핑 하기에 Activity 에 있는 뷰와 관련된 로직을 줄여준다
뷰바인딩 방법
- build.gradle 에 enable 추가
- Activity 에서 ViewBinding 사용
- Fragment 에서 ViewBinding 사용
build.gradle 에 enable 추가
1 2 3 4 5 6
| android { ... buildFeatures { viewBinding = true } }
|
Activity 에서 ViewBinding 사용
activity_main.xml 의 경우
1 2 3 4 5 6 7 8
| override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivitymainBinding.inflate(layoutInflater)
binding.txtFirst.text = "Hello" binding.txtSecond.text = "World" binding.btnConfirm.setOnClickListener { } setContentView(binding.root) }
|
Fragment 에서 ViewBinding 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class LockerFragment : Fragment() { private var _binding: FragmentLockerBinding? = null private val binding get() = _binding!!
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { _binding = FragmentLockerBinding.inflate(inflater, container, false) val view = binding.root return view } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) binding.txtView.text = "Hello" } override fun onDestroyView() { super.onDestroyView() _binding = null } }
|
데이터바인딩 방법
- build.gradle 에 enable 추가
- xml 파일에 layout 작성
- Activity 에서 DataBindingUtil.setContentView() 사용
- data class 선언
- layout 에 data 태그 추가
- Activity 에서 layout 의 data 태그를 binding 해서 사용한다
build.gradle 에 enable 추가
1 2 3 4 5 6
| adroid{ ... buildFeatures { dataBidning = true } }
|
xml 파일에 layout 작성
1 2 3 4 5 6 7 8 9 10 11 12
| <layout :android="http://schemas.android.com/apk/res/android" ...> <androidx.drawerlayout.widget.DrawerLayout ... android:id="@+id/drawer"> <TextView android:id="@+id/txtName" ... android:text="Name"/> ... </androidx.drawerlayout.widget.DrawerLayout> </layout>
|
Activity 에서 DataBindingUtil.setContentView() 사용
1
| DataBindingUtil.setContentView()
|
data class 선언
1 2 3 4 5
| data class GameData ( var img : Drawable, var id : String, val name : String )
|
layout 에 data 태그 추가
1 2 3 4 5 6 7 8
| <layout :android="http://schemas.android.com/apk/res/android" ...>
<data> <variable name="gamedatas" type="com.skyksit.dsam3.GameData" /> </data>
|
Activity 에서 layout 의 data 태그를 binding 해서 사용한다
1 2 3 4 5 6 7 8 9
| class MainActivity : AppCompatActivity() { private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) binding.gamedatas = GameData("data", "binding") } }
|
참고포스트