【问题标题】:How can I use ViewBinding with RecyclerView Adapter with an already existing inner class in Kotlin?如何将 ViewBinding 与 RecyclerView Adapter 与 Kotlin 中现有的内部类一起使用?
【发布时间】:2021-05-30 20:44:05
【问题描述】:

TodoAdapter.kt

class TodoAdapter (var todos:List<Todo>) : RecyclerView.Adapter<TodoAdapter.TodoViewHolder>(){

  inner class TodoViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)

  override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TodoViewHolder {

      val view= LayoutInflater.from(parent.context).inflate(R.layout.todo_layout, parent, false)
      return TodoViewHolder(view)

  }

  override fun onBindViewHolder(holder: TodoViewHolder, position: Int) {
      holder.itemView.apply {
      }

  }

  override fun getItemCount(): Int {
      return todos.size
  }
}

上面是 Recycler View Adapter 类。

我已经有一个内部类 TodoAdapter。我该如何使用 ViewBinding?

我要访问视图的布局文件是 todo_layout.xml

【问题讨论】:

  • 确保 todo_layout 的最外层视图是 。然后做 TodoLayoutBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.todo_layout, parent, false);在 onCreateViewHolder
  • 这里是xml文件。 del.dog/todo_layout.txt
  • 这是你说的新的 kotlin 文件del.dog/TodoAdapter.go
  • 这还是不行。
  • 您能准确说出什么不起作用吗?我发布了一个答案

标签: android android-studio kotlin android-recyclerview android-viewbinding


【解决方案1】:

我假设您熟悉 ViewBinding。以下是如何将 ViewBinding 与 RecyclerViewAdapter 一起使用。

这里将是您的TodoAdapter.kt

class TodoAdapter (var todos:List<Todo>) : RecyclerView.Adapter<TodoAdapter.TodoViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TodoViewHolder {
        val binding = TodoLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return TodoViewHolder(binding)
    }

    override fun onBindViewHolder(holder: TodoViewHolder, position: Int) {
        holder.bind()
    }

    override fun getItemCount(): Int {
        return todos.size
    }

    inner class TodoViewHolder(private val binding: TodoLayoutBinding) : RecyclerView.ViewHolder(binding.root) {
        fun bind(){
            binding.apply{
                // Assign Values
            }
        }
    }
}

现在在您的 TodoViewHolder 绑定函数调用中,您可以访问所有视图。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2020-10-06
    • 2021-08-02
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多