簡體   English   中英

如何更改 findViewById 以查看綁定?

[英]How can i change findViewById to view binding?

這是我的適配器代碼;

    class ModelViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    private val chName: TextView = view.findViewById(R.id.chName)
    private val chBirthYear: TextView = view.findViewById(R.id.chBirthYear)
    private val chHeight: TextView = view.findViewById(R.id.chHeight)
    private val chHomeWorld: TextView = view.findViewById(R.id.chHomeWorld)

獲取列表項視圖綁定 class 並將其更改為:

//ItemModelBinding is the generated binding class for the list view item
class ModelViewHolder(val binding: ItemModelBinding) : RecyclerView.ViewHolder(binding.root) {

        fun bind(item: SomeModelClass) {
            binding.chName = item.chName
            binding.chBirthYear = item.chBirthYear
            binding.chHeight = item.chHeight
            binding.chHomeWorld= item.chHomeWorld
            
            binding.executePendingBindings()
        }
override fun onBindViewHolder(holder: ModelViewHolder, position: Int) {
        val item = getItem(position)
        holder.bind(item)
    }
class ModelViewHolder(view: View) RecyclerView.ViewHolder(view){
    val binding = LayoutYouWantToUseBinding.bind(view)
}

ListAdapter是 RecyclerView.Adapter 基礎 class 用於在 RecyclerView 中呈現 List 數據,包括在后台線程上計算 List 之間的差異。

DiffUtil有助於計算后台線程上兩個列表之間的差異。 並且僅更新數據已更改的視圖意味着onBindViewHolder()的調用次數減少,如果我們仍然堅持在任何數據更改時使用notifyDataSetChanged () ,這將調用所有項目。

class ModelAdapter : ListAdapter<Model, ModelAdapter.ModelViewHolder>(ModelDiffCallBack()) {

    class ModelViewHolder(private val binding: ModelItemLayoutBinding) :
    RecyclerView.ViewHolder(binding.root) {

    fun bind(model: Model) {
        //if data binding is also enabled
        binding.model = model
        //else set data for each view one after another
        binding.txtTitle.text = model.title
        //and so on for all the items
        
        
        binding.executePendingBindings()
    }

    companion object {
        fun from(parent: ViewGroup): ModelViewHolder {
            val layoutInflater = LayoutInflater.from(parent.context)
            val binding = ModelItemLayoutBinding.inflate(layoutInflater, parent, false)
            return ModelViewHolder(binding)
        }
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ModelViewHolder =
    ModelViewHolder.from(parent)

override fun onBindViewHolder(holder: ModelViewHolder, position: Int) {
    val model = getItem(position)
    holder.bind(model)
}

class ModelDiffCallBack : DiffUtil.ItemCallback<Model>() {
    override fun areItemsTheSame(oldItem: Model, newItem: Model): Boolean =
        oldItem === newItem

    override fun areContentsTheSame(oldItem: Model, newItem: Model): Boolean =
        oldItem == newItem
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM