Можем ли мы иметь горизонтальный обзор переработчика внутри вертикального обзора переработчика? - PullRequest
0 голосов
/ 03 ноября 2019

Основное recyclerview, которое расположено вертикально recyclerview, показывает все сделки в макете

Но я хочу достичь:

  • после первого10 сделок, я хочу отобразить (горизонтальный просмотр) 5 рекомендованных сделок
  • после следующих 10 сделок, я хочу отобразить (горизонтальный просмотр) 5 рекомендуемых сделок
  • после следующей10 сделок, я хочу отобразить (горизонтальный просмотр списка) из 5 рекомендуемых сделок и так далее ...

Я прикрепил изображение того, как я хочу, чтобы дизайн выглядел.

Понятия не имею, как это реализовать. Но у меня оба recyclerview работают по отдельности. Просто не уверен, как их объединить. Я даже не уверен, что код в adapters или mainactivity. Я прикрепил изображение горизонтального recyclerview адаптера и вертикального recyclerview адаптера. Пожалуйста, помогите мне, показывая мне, как реализовать эту функцию. Спасибо

Как я хочу, чтобы мой дизайн выглядел как

Изображение горизонтального адаптера вьюблера

1-е изображениевертикальный адаптер повторного просмотра

2-е изображение вертикального адаптера повторного просмотра

3-е изображение вертикального адаптера для повторного просмотра

1 Ответ

0 голосов
/ 04 ноября 2019
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 и добавлять элементы путем итерации.

...