Android Studio 中的通用视图绑定
Generic View Binding in Android Studio
我正在为 ListAdapter
和 SelectionTracker<Long>
撰写摘要 类。在我的例子中,SelectionTracker
通过
按 selectionKey
组织项目
interface TrackedListItem {
var selectionKey : Long?
}
现在,RecyclerView
中的项目(因此,存储在 ListAdapter
中的项目)需要绑定一个“viewModel”(注意这不会扩展 ViewModel
,我只是遵循 Android Sunflower) 中概述的约定。坚持相同的约定,我的 ViewHolder
应该以 ViewBinding
作为参数:
abstract class TrackedItemViewHolder(val binding: ViewBinding) : RecyclerView.ViewHolder(binding.root)
我提前知道传递给 ViewHolder
的绑定有一个我可以绑定的数据变量 viewModel
,我会知道这个 viewModel
实现 TrackedListItem
。我如何创建一个有效地通过的通用布局(并因此绑定):
<data><variable
name="viewModel"
type="...TrackedListItem" /></data>
任何感兴趣的人的合理解决方法是声明:
abstract class TrackedItemViewHolder(val binding: ViewBinding) :
RecyclerView.ViewHolder(binding.root){
abstract val viewModel : TrackedListItem
...
然后在实现中:
override val viewModel : TrackedListItem
get() = (binding as bindingWithViewModel).viewModel!!
我正在为 ListAdapter
和 SelectionTracker<Long>
撰写摘要 类。在我的例子中,SelectionTracker
通过
selectionKey
组织项目
interface TrackedListItem {
var selectionKey : Long?
}
现在,RecyclerView
中的项目(因此,存储在 ListAdapter
中的项目)需要绑定一个“viewModel”(注意这不会扩展 ViewModel
,我只是遵循 Android Sunflower) 中概述的约定。坚持相同的约定,我的 ViewHolder
应该以 ViewBinding
作为参数:
abstract class TrackedItemViewHolder(val binding: ViewBinding) : RecyclerView.ViewHolder(binding.root)
我提前知道传递给 ViewHolder
的绑定有一个我可以绑定的数据变量 viewModel
,我会知道这个 viewModel
实现 TrackedListItem
。我如何创建一个有效地通过的通用布局(并因此绑定):
<data><variable
name="viewModel"
type="...TrackedListItem" /></data>
任何感兴趣的人的合理解决方法是声明:
abstract class TrackedItemViewHolder(val binding: ViewBinding) :
RecyclerView.ViewHolder(binding.root){
abstract val viewModel : TrackedListItem
...
然后在实现中:
override val viewModel : TrackedListItem
get() = (binding as bindingWithViewModel).viewModel!!