Привязка общего представления в Android Studio

#xml #android-layout #kotlin #android-databinding

#xml #android-макет #kotlin #android-привязка к данным

Вопрос:

Я нахожусь в процессе написания абстрактных классов для a ListAdapter с a SelectionTracker<Long> . В моем случае элементы SelectionTracker упорядочиваются по selectionKey s через

 interface TrackedListItem {

    var selectionKey : Long? 

}
  

Теперь элементы в RecyclerView (и, следовательно, элементы, хранящиеся в ListAdapter ), должны привязывать «ViewModel» (обратите внимание, что это не распространяется ViewModel , я просто следую соглашениям, изложенным в Android Sunflower). Придерживаясь тех же соглашений, my ViewHolder должен принимать a ViewBinding в качестве аргумента:

 abstract class TrackedItemViewHolder(val binding: ViewBinding) : RecyclerView.ViewHolder(binding.root)
  

Я заранее знаю, что привязка, переданная в ViewHolder , имеет переменную данных viewModel , к которой я могу привязаться, и я буду знать, что это viewModel реализует TrackedListItem . Как я могу создать общий макет (и, следовательно, привязку), который эффективно просто проходит:

 <data><variable
            name="viewModel"
            type="...TrackedListItem" /></data>
  

Ответ №1:

Разумный обходной путь для всех, кто заинтересован, — объявить:

 abstract class TrackedItemViewHolder(val binding: ViewBinding) : 
                                    RecyclerView.ViewHolder(binding.root){

    abstract val viewModel : TrackedListItem 
    ...
  

а затем в реализациях:

 override val viewModel : TrackedListItem
    get() = (binding as bindingWithViewModel).viewModel!!