구글에서 검색어 android kotlin view bindg 을 검색하면, https://developer.android.com/topic/libraries/view-binding?hl=ko 를 검색된다.
view binding은 Android Studio 3.6 Canary 11 이상에서 사용할 수 있다.
앱 build.gradle 추가사항
android {
...
viewBinding {
enabled = true
}
}
또는
android {
...
buildFeatures {
viewBinding true
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:background="#F5F8FD"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/single_item"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</androidx.constraintlayout.widget.ConstraintLayout>
view binding 을 사용하지 않았을 때는
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) // layout 과 연결
}
view binding 을 사용시에는 setContentView(R.layout.activity_main) 대신에 코드를 변경해야 한다.
view binding 이름을 명명하는 원칙이 있는데, activity_main.xml 에서 첫글자는 대문자로하는 카멜 표기법으로 즉, ActivityMainBinding 으로 한다. 메인 액티비티 --> 액티비티 메인 바인딩
코드는 프래그먼트에서 뷰 결합 사용시와의 일관성 유지를 위한 코드를 작성하는 것이 좋을 듯하다.
아래 샘플 코드는 https://developer.android.com/topic/libraries/view-binding?hl=ko 에 설명된 예제
private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = ResultProfileBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
class MainActivity : AppCompatActivity() {
// view binding for the activity
private var _binding: ActivityMainBinding? = null
private val binding get() = _binding!!
// get reference to the adapter class
private var languageList = ArrayList<DataItem>()
private lateinit var expandableAdapter: ExpandableAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 메인 액티비티 --> 액티비티 메인 바인딩
_binding = ActivityMainBinding.inflate(layoutInflater) // 자동 완성된 액티비티 메인 바인딩 클래스 인스턴스를 가져왔다.
setContentView(binding.root) // View Bindg 과정
// define layout manager for the Recycler view
binding.rvList.layoutManager = LinearLayoutManager(this)
// attach adapter to the recyclerview
expandableAdapter = ExpandableAdapter(languageList)
getData()
binding.rvList.adapter = expandableAdapter
}
위 코드에서 바인딩 방법을 다르게 하는 예제
class MainActivity : AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
// get reference to the adapter class
private var languageList = ArrayList<DataItem>()
private lateinit var expandableAdapter: ExpandableAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root) // View Bindg 과정
// define layout manager for the Recycler view
binding.rvList.layoutManager = LinearLayoutManager(this)
// attach adapter to the recyclerview
expandableAdapter = ExpandableAdapter(languageList)
getData()
binding.rvList.adapter = expandableAdapter
}
RecyclerView 에서 view binding 하는 사항은 https://stackoverflow.com/questions/60423596/how-to-use-viewbinding-in-a-recyclerview-adapter 의 답변을 참조하거나, https://github.com/jsk005/KotlinProjects/blob/master/expandablerv/src/main/java/com/link2me/expandablerv/ExpandableAdapter.kt 를 참조하면 도움될 것이다.
'안드로이드 > Kotlin 기능' 카테고리의 다른 글
[코틀린] MPChart LineChart 예제 (라이브러리 3.1.0) (0) | 2021.06.14 |
---|---|
코틀린 View Model 예제 (0) | 2021.06.04 |
[코틀린] 인터넷 IP 주소 알아내기 (0) | 2021.02.06 |
[코틀린] IP 주소 알아내기 (0) | 2021.02.06 |
코틀린 RSA 암호화/복호화 TravisRsa (0) | 2021.02.03 |