klaster icon indicating copy to clipboard operation
klaster copied to clipboard

DataBinding support?

Open desugar-64 opened this issue 6 years ago • 1 comments

Have you any plans to support DataBinding layouts?

desugar-64 avatar Jan 02 '19 21:01 desugar-64

What do you mean? I've tried it recently, it works with data binding.

val articlesAdapter = Klaster.withViewHolder<DataBindingViewHolder>()
  .itemCount { articles.size }
  .viewHolder { _: Int, parent: ViewGroup ->
    val binding: ViewDataBinding = DataBindingUtil.inflate(
      layoutInflater, R.layout.article_list_item, parent, false
    )
    return@viewHolder DataBindingViewHolder(binding)
  }
  .bind { position ->
    val article = articles[position]
    this.bind(article, artileListHandlers)
  }
  .build()

interface ArticleListHandlers {
  fun onArticleClick(article: Article) {}
}

class DataBindingViewHolder(private val binding: ViewDataBinding) : RecyclerView.ViewHolder(binding.root) {
  fun bind(viewData: Any, handlers: Any) {
    binding.setVariable(BR.viewData, viewData)
    binding.setVariable(BR.handlers, handlers)
    binding.executePendingBindings()
  }
}

This data binding stuff

  .viewHolder { _: Int, parent: ViewGroup ->
    val binding: ViewDataBinding = DataBindingUtil.inflate(
      layoutInflater, R.layout.article_list_item, parent, false
    )
    return@viewHolder DataBindingViewHolder(binding)
  }

can be moved to an extension function if needed. Or may be you mean something else?

rongi avatar Apr 28 '19 18:04 rongi