class MyAdapter(val list: List<String?>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val TYPE_ITEM = 0
private val TYPE_HORIZONTAL_ITEM = 1
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if(viewType == TYPE_ITEM) {
ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_layout, parent, false))
}else HorizontalViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.horizontal_layout, parent, false))
}
override fun getItemCount(): Int {
return list.size
}
override fun getItemViewType(position: Int): Int {
return if(list[position]!=null) TYPE_ITEM else TYPE_HORIZONTAL_ITEM
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(holder is ViewHolder){
holder.bind(list[position]?:"")
// manage your items
}else if(holder is HorizontalViewHolder)
holder.bind()
// manage your horizontal recyclerView
}
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
fun bind(item: String){
}
}
class HorizontalViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
fun bind(){
}
}
Вы должны создать адаптер, который работает с разными типами просмотра. В качестве примера я составил список строк, и каждый десятый элемент равен нулю, что указывает на то, что это горизонтальный recyclerView. Я полагаю, что в вашем случае вместо null это должна быть модель для обработки горизонтального recyclerView. Например, список из 20 элементов должен иметь размер 22, потому что есть два горизонтальных окна просмотра.
for (i in 1 until 25){
if (i % 10 == 0)
list.add(null)
else list.add("Hello")
}
recyclerView.adapter = MyAdapter(list)
введите описание изображения здесь
Я приложил окончательную версию своего результата, и цветные поля предназначены для вашего RecyclerView. Я предлагаю вам избегать использования внутреннего RecyclerView и использовать вместо него NestedScrollView и добавлять элементы путем итерации.