Android RecyclerView Adapter View Bindingの適用
15513 ワード
Activityはすべてビューバインディングを適用し,RecyclerView部分は初期にファイルのコピーと貼り付けを繰り返し,すべて
🙋🏻♀️ 空気入りとは何ですか.
xmlに表示されるレイアウトをメモリにオブジェクト化
コードも簡潔な利点がありますが、
findViewById
を適用した.(;´д`)ゞ🙋🏻♀️ 空気入りとは何ですか.
xmlに表示されるレイアウトをメモリにオブジェクト化
💻 findViewByIdを適用するコード
class ReviewPhotoAdapter(val callback: (String) -> Unit) :
ListAdapter<String, ReviewPhotoAdapter.ViewHolder>(diffUtil) {
inner class ViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
fun bind(item: String) {
val reviewImageView = view.findViewById<ImageView>(R.id.reviewImageView)
Glide.with(TestApp.instance)
.load(item)
.error(R.drawable.ic_person)
.into(reviewImageView)
reviewImageView.setOnClickListener {
callback(item)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.item_review_photo, parent, false)
)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
return holder.bind(currentList[position])
}
companion object {
val diffUtil = object : DiffUtil.ItemCallback<String>() {
override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
}
}
}
上のコードは簡単なコードで、複雑ではないように見えますが、大量のビューのレイアウトを接続するとfindViewById
に倍増します.これは話題です.😅 したがって、RecylerViewセクションでは、ビューバインドをすべて適用することも決定されます.💻 View Bindingのコードの適用
class ReviewPhotoAdapter(val callback: (String) -> Unit) :
ListAdapter<String, ReviewPhotoAdapter.ViewHolder>(diffUtil) {
inner class ViewHolder(private val binding: ItemReviewPhotoBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: String) {
Glide.with(TestApp.instance)
.load(item)
.error(R.drawable.ic_person)
.into(binding.reviewImageView)
binding.reviewImageView.setOnClickListener {
callback(item)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
// ItemReviewPhotoBinding 클래스로 만들어지는 binding 인스턴스를 사용하도록 변경
ItemReviewPhotoBinding.inflate(LayoutInflater.from(parent.context), parent, false)
)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
return holder.bind(currentList[position])
}
companion object {
val diffUtil = object : DiffUtil.ItemCallback<String>() {
override fun areItemsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: String, newItem: String): Boolean {
return oldItem == newItem
}
}
}
}
View Bindingを使うメリットは何ですか?
コードも簡潔な利点がありますが、
findViewById
は人が直接作成して接続しているので、乱発するとエラーが発生するのは避けられません…!エラーなしでビューをエラーの部分に接続Android 4.1以前のバージョンでは、Kotlin拡張機能のため、findViewById<ⓐ>(R.id.reviewImageView)
を省略することもあり、他のxmlファイルのidと同じであれば、対応するビューが見つからずアプリケーションがハングアップする場合があります.最終的にはバインドされたxmlファイルでしかIDが見つからないので、「ビューバインド」(View Binding)が最適です.👍🏻Reference
この問題について(Android RecyclerView Adapter View Bindingの適用), 我々は、より多くの情報をここで見つけました https://velog.io/@dear_jjwim/안드로이드-RecyclerView-Adapter-View-Binding-적용하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol