То, что вам нужно, - это два разных макета, один для пользователя и один для вас, но только один адаптер, в представлениях Recycler может быть только один.
Ваш адаптер должен затем расширить RecyclerView.Adapter<RecyclerView.ViewHolder>
, и мы должны реализовать getItemViewType
и выполнить небольшую работу внутри onCreateViewHolder
, и наш адаптер должен принять эту форму
class BillAmountsHolder (itemView: View) : RecyclerView.ViewHolder(itemView) {
/**
* Set view with values available
*/
fun setValues (value: String?) {
itemView.bill_amount_account_radio_button.text = value
}
} Как насчетдва держателя?Представьте, что у вас есть объект, а затем список, возможно, одним из решений может быть NestedScrollView, но что, если это повторяется, возможно, у вас есть простой объект, затем список строк, а затем еще один объект и, наконец, другой список.Вероятно, нам следует использовать RecyclerView с несколькими держателями
Затем наш адаптер должен расширить RecyclerView.Adapte, и мы должны реализовать getItemViewType и выполнить небольшую работу внутри onCreateViewHolder, и наш адаптер должен принять эту форму
class StoreAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var result: List<YOUR-COMPLEX-OBJECT>? = null
/**
* Get item
*/
override fun getItemViewType(position: Int): Int {
return position
}
/**
* Create view depending of the type of the viewgroup
* changing to have a header as a holder
* @param parent ViewGroup
* @param viewType Int type
*/
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == 0)
StoreHeaderHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_stores_info, parent, false))
else
StoreHolder(LayoutInflater.from(parent.context).inflate(R.layout.layout_use_place, parent, false))
}
/**
* Initialize the holder StoreHolder
*/
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (position == 0) {
val holderHeader = holder as StoreHeaderHolder
holderHeader.setValues(infoListener)
} else {
val holderBody = holder as StoreHolder
holderBody.setValues(result?.get(position - 1), distance)
}
}
/**
* Get size items
*/
override fun getItemCount(): Int {
return if (result != null)
result!!.size + 1
else
0
}
}
Пожалуйста, проверьте эту ссылку: https://medium.com/knowing-android/recyclerview-with-two-holders-320fc83759c0 Для реализации Java вы можете найти ее здесь: https://gist.github.com/dinorahtovar/bfc8bf3b41f70838beaa5d9089b6bda9#file-recyclerview-recyclerviewadapter-y-recyclerviewholder