app모듈 build.gradle 파일에 viewBinding 사용 설정을 한다.
android {
buildFeatures{
viewBinding = true
}
}
Binding 클래스이름은 레이아웃 xml 파일명을 파스칼케이스(단어 첫글자를 대문자표기)로 변환하여 Binding을 붙인다.
예)
activity_main.xml => ActivityMainBinding
fragment_menu.xml => FragmentMenuBinding
contact_list_item.xml => ContactListItemBinding
Activity
//바인딩 변수 생성할때 초기화
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//기존
//setContentView(R.layout.activity_main)
//변경 binding.root로 전달
setContentView(binding.root)
}
fun initView(){
binding.txtName.text = "Name" //사용은 기존코드에 binding. 만 앞에 추가하면 된다.
}
Fragment
//바인딩 변수
private lateinit var binding:FragmentMenuBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
//기존
//val view = inflater.inflate(R.layout.fragment_menu, container, false)
//return view
//변경
binding = FragmentMenuBinding.inflate(inflater, container, false)
return binding.root
}
fun initEvent(){
binding.btnUp.setOnclickListener{v:View? -> //TODO }
}
Adapter
class ContactListAdapter(val contacts: ArrayList<Contact>) : RecyclerView.Adapter<ContactListAdapter.ViewHolder>() {
//기존
//class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
//변경 binding.root로 전달
class ViewHolder(val binding: ContactListItemBinding) : RecyclerView.ViewHolder(binding.root){
fun bindItems(contact:Contact){
//기존
//val tvName = itemView.findViewById(R.id.tvName) as TextView
//val tvNumber = itemView.findViewById(R.id.tvNumber) as TextView
//변경 binding 추가
binding.tvName.text = "("+ contact.id +") "+ contact.name
binding.tvNumber.text = contact.number
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactListAdapter.ViewHolder {
//기존
//val v = LayoutInflater.from(parent.context).inflate(R.layout.contact_list_item, parent, false)
//return ViewHolder(v)
//변경
val binding = ContactListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bindItems(contacts[position])
}
override fun getItemCount(): Int {
return contacts.size
}
}
'개발 > Android' 카테고리의 다른 글
풍선도움말 레이아웃 구현 (1) | 2021.03.24 |
---|---|
프로젝트에 NDK 모듈 추가하기 (0) | 2021.03.05 |
Android Studio Rename Package (0) | 2021.02.24 |
Appium 설치 (0) | 2021.02.17 |
Appium 실행 (0) | 2021.02.17 |