viewBinding이 사용 되는 예제를 살펴보자.
viewBinding을 하기 위해서는 우선 :app build.gradle 에 다음의 내용을 추가해 줘야 한다.
android {
buildFeatures{
viewBinding true
}
buildFeatures{
viewBinding true
}
기본 Activity에 viewBinding 설정하는 방법
🐤 Activity에 적용
적용 전
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
적용하는 방법 1
class MainActivity : AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
setContentView(binding.root)
}
적용하는 방법 2
class MainActivity : AppCompatActivity() {
// 액티비티에서 사용할 레이아웃의 뷰 바인딩 클래스
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 뷰 바인딩 클래스의 인스턴스를 생성합니다.
binding = ActivityMainBinding.inflate(layoutInflater)
// 생성된 뷰를 액티비티에 표시합니다.
setContentView(binding.root)
}
-- 출처: https://www.androidhuman.com/2020-11-25-android_view_binding
Fragment에 설정하는 방법
🐤 Fragment 적용
기본
적용하는 방법 3
-- 출처: https://www.androidhuman.com/2020-11-25-android_view_binding
class BlankFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank, container, false)
}
적용하는 방법 1
class BlankFragment : Fragment() {
//lateinit 으로 binding을 선언
lateinit var binding: FragmentBlankBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
// return inflater.inflate(R.layout.fragment_blank, container, false)
binding = FragmentBlankBinding.inflate(inflater, container, false)
return binding.root
}
적용하는 방법 2
class BlankFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
// return inflater.inflate(R.layout.fragment_blank, container, false)
val binding = FragmentBlankBinding.inflate(inflater, container, false)
return binding.root
}
적용하는 방법 3
class SecondFragment : Fragment() {
private var _binding: FragmentSecondBinding? = null;
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentSecondBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
-- 출처: https://www.androidhuman.com/2020-11-25-android_view_binding
Adapter에 설정하는 방법
🐤 Adapter에 적용
적용하는 방법 1
class CustomAdapter : RecyclerView.Adapter<Holder>() {
// 바인딩.inflate() 구조는 프래그먼트와 동일
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val binding = ItemRecyclerBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return Holder(binding)
}
... 생략
}
// val 예약어로 바인딩을 전달 받아서 전역으로 사용합니다.
// 그리고 상속받는 ViewHolder 생성자에는 꼭 binding.root를 전달해야 합니다.
class Holder(val binding: ItemRecyclerBinding) : RecyclerView.ViewHolder(binding.root) {
fun setValue(value:String) {
// 생성자에서 val로 받았기 때문에 홀더 내부 어디에서나 binding 사용가능
binding.textView.text = value
}
}
- 출처: https://flow9.net/bbs/board.php?bo_table=android&wr_id=27적용하는 방법 2
class CustomPagerAdapter : RecyclerView.Adapter<Holder>() {
var textList = listOf<String>()
override fun getItemCount(): Int {
return textList.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val binding = ItemViewpagerBinding.inflate(LayoutInflater.from(parent.context), parent,false)
return Holder(binding)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
val text = textList[position]
holder.setText(text)
}
}
//홀더에서 binding 파라미터를 전역변수로 사용하기 위해서 앞에 val 키워드를 사용하는 것을 꼭 기억하자
class Holder(val binding: ItemViewpagerBinding): RecyclerView.ViewHolder(binding.root){
fun setText(text:String){
binding.textView.text = text
}
}
출처: 이것이 안드로이드다, 코틀린편, 개정판 P.429
반응형
'코딩ㆍ개발 정보 > 안드로이드앱 (코틀린)' 카테고리의 다른 글
안드로이드 5.0 이하 벡터 드로어블 적용을 위한 build.gradle 설정 방법 (0) | 2022.02.05 |
---|---|
The 친절한 코틀린 앱 프로그래밍, 오류 해결 방법 (0) | 2022.01.03 |
맥용 안드로이드스튜디오 단축키 모음 (0) | 2021.11.06 |
JSON To Kotlin Class 플러그인 추가 방법 (0) | 2021.11.03 |
GlideApp 설정 및 사용 방법 (0) | 2021.11.03 |
댓글