View Binding을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있으며,
View Binding은 각 XML 레이아웃 파일의 Binding 클래스를 생성합니다.
즉, 간단하게 말하자면 findViewById를 사용하지 않고,
XML의 view component에 접근하는 object를 반환받아 view에 접근하는 방식입니다.
android{
...
// Android 4.0 이하
viewBinding{
enabled = true
}
// Android 4.0 이상
buildFeatures{
viewBinding = true
}
}
Sync Now
를 누르게 되면 모든 layout에 대해서 binding object가 생성private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
private lateinit var binding: ActivityMainBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentSettingBinding.inflate(inflater, container, false)
return binding.root
}
먼저, Data Binding이란 데이터 결합을 의미하며,
레이아웃의 뷰를 결합하여 간단하게 xml파일에 data를 연결해 사용하는 방법입니다.
Activity에서 따로 View를 정의해서 사용하지 않아도 Dataview를 연결시키면
Data 변화할때 따로 세팅해주지 않아도 변경되게 할 수 있습니다.
android{
...
// Android 4.0 이하
dataBinding {
enabled true
}
// Android 4.0 이상
buildFeatures {
dataBidning = true
}
}
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.testBtnId.setOnClickListener {
Toast.makeText(this, "click", Toast.LENGTH_LONG).show() <- 데이터 바인딩 사용
}
}
}
<layout> <- 레이아웃
<androidx.constraintlayout.widget.ConstraintLayout...>
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
...
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btnSample"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout> <- 레이아웃