Я создаю универсальный адаптер для любого типа привязки ..
class DataBindingBaseAdapter<T> : RecyclerView.Adapter<DataBindingViewHolder<T>> {
private var listItems: List<T>
private var layoutID: Int
constructor(layoutID: Int,listItems: List<T>) {
this.listItems = listItems
this.layoutID = layoutID
}
override fun onCreateViewHolder(parent: ViewGroup, p1: Int): DataBindingViewHolder<T> {
val binding = DataBindingUtil.inflate<ViewDataBinding>(LayoutInflater.from(parent.context),
layoutID,parent,false)
return DataBindingViewHolder(binding)
}
override fun getItemCount(): Int {
return listItems.size
}
override fun onBindViewHolder(holder: DataBindingViewHolder<T>, pos: Int) {
holder.bindData(listItems.get(pos))
}
}
DataBindingViewHolder.kt
class DataBindingViewHolder<T>(val binding: ViewDataBinding) : RecyclerView.ViewHolder(binding.root) {
fun bindData(model : T){
binding.setVariable(BR.user,model)
binding.executePendingBindings()
}
}
TestListActivity.kt
class TestListActivity : AppCompatActivity() {
val userList: MutableList<User> = mutableListOf(
User("FirstName", "LastName"), User("FirstName2", "LastName")
, User("FirstName3", "LastName"), User("FirstName4", "LastName"), User("FirstName5", "LastName"),
User("FirstName6", "LastName"), User("FirstName", "LastName")
)
val personList: MutableList<Person> = mutableListOf(
Person("PersonName -> 1"), Person("FirstName2")
, Person("PersonName -> 3"), Person("FirstName2"), Person("FirstName"), Person("FirstName2")
, Person("PersonName -> 6"), Person("FirstName2")
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test_list)
recyclerView.apply {
layoutManager = LinearLayoutManager(this@TestListActivity)
//adapter = DataBindingBaseAdapter<User>(R.layout.item_row, userList);
adapter = DataBindingBaseAdapter<Person>(R.layout.item_person, personList);
}
}
}
Можно ли отправить любую универсальную переменную на DataBindingViewHolder
binding.setVariable(BR.user,model) //for each type of Model it is BR.person and BR.user.
Есть ли Generic variable
,Или я должен передать это paramter
в Adapter и получить его в DataBindingViewHolder
Обычно мы должны показать список элементов в RecyclerView.Если это возможно, это будет очень удивительно.И еще одна вещь, если я передам переменную BR.user или BR.person в качестве аргумента адаптера и установлю ее в DataBindingViewHolder
Есть ли проблемы с производительностью ??