android viewbinding 在adapter中使用

748 阅读2分钟

来自chatGpt 在 Android 中,ViewBinding 是一种用于在布局文件中查找视图的类型安全方式,它可以替代 findViewById() 方法。在 Adapter 中使用 ViewBinding 可以简化代码,提高效率。

要在 Adapter 中使用 ViewBinding,需要在适配器类中创建 ViewBinding 对象。下面是一个示例:

首先,确保在 build.gradle 文件中添加了 ViewBinding 的依赖项:

android {
    ...
    buildFeatures {
        viewBinding true
    }
    ...
}

接下来,在 Adapter 类中添加一个 ViewBinding 变量,如下所示:

class MyAdapter(private val itemList: List<Item>) :
    RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

    private lateinit var binding: ItemLayoutBinding

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        binding = ItemLayoutBinding.inflate(
            LayoutInflater.from(parent.context),
            parent,
            false
        )
        return MyViewHolder(binding.root)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val currentItem = itemList[position]
        holder.itemView.apply {
            binding.textView.text = currentItem.text
            binding.imageView.setImageResource(currentItem.imageResource)
        }
    }

    override fun getItemCount() = itemList.size

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}

在 onCreateViewHolder 方法中,我们使用 inflate() 方法来创建 ViewBinding 对象,然后将其传递给 ViewHolder 构造函数。在 onBindViewHolder 方法中,我们可以使用 ViewBinding 对象来访问布局文件中的视图。在这个例子中,我们通过 ViewBinding 对象设置了 TextView 和 ImageView 的文本和图像资源。

请注意,在 onBindViewHolder 方法中,我们使用了 itemView.apply{} 代码块来访问布局文件中的视图。这是因为在 onBindViewHolder 方法中,我们只有访问 ViewHolder 的 itemView 对象的权限。因此,我们需要使用 apply{} 代码块来访问 ViewBinding 对象。

最后,在 Activity 或 Fragment 中,创建适配器并将其设置为 RecyclerView 的适配器,如下所示:

reasonml

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val itemList = listOf(
            Item("Item 1", R.drawable.ic_item_1),
            Item("Item 2", R.drawable.ic_item_2),
            Item("Item 3", R.drawable.ic_item_3)
        )

        val adapter = MyAdapter(itemList)
        binding.recyclerView.adapter = adapter
    }
}

在这个例子中,我们使用 ViewBinding 来获取 Activity 的根视图,并将其用作 setContentView() 方法的参数。然后,我们创建了一个 Item 对象的列表,并将其传递给 MyAdapter 构造函数。最后,我们将适配器设置为 RecyclerView 的适配器。

这样,我们就可以在 Adapter 中使用 ViewBinding 了。