2

Добрый день. Стоит задача сделать экран, в котором будет несколько Recycler View. В каждом RecyclerView будет несколько Card View. Как это правильно реализовать? Для каждого Recycler View создавать контейнер? Вот примерный рисунок, как должно выглядеть:введите сюда описание изображения эскиз введите сюда описание изображения

ivanovd422
  • 1,311
  • 2
    А что мешает засунуть это всё в один RecyclerView? – xkor May 16 '16 at 07:15
  • Если это для выбора каких то пунктов по нескольким отдельным параметрам, то уместнее будет использовать Spiner, при вашей компоновке в каждом списке будет видно в лучшем случае полтора элемента, если речь идет о телефонах. – pavlofff May 16 '16 at 07:21
  • @xkor нужно именно несколько RecyclerView, а между ними text view – ivanovd422 May 16 '16 at 07:21
  • 1
    @Denis422 почему нужно именно так? Что не позволяет использовать один RecyclerView? Религия? Или они у вас отдельно друг от друга скролятся? Отдельные действительно логичны только в этом случае. – xkor May 16 '16 at 07:26
  • @xkor хорошо, если использовать 1 RecyclerView (дабы не засорять код и т.д.), то как реализовать: экран, скролящийся вниз в зависимости от количества элементов; на экране текствьюшка, сразу за ней следует список RecyclerView из CardView; Далее новая текствьюшка, за ней опять следует RecyclerView; Количество CardView в каждом списке может быть разное, но оно известно до перехода на этот экран. Подскажите как правильно это реализовать, возможно мой план изначально был неверен. – ivanovd422 May 16 '16 at 08:44

2 Answers2

5

На сколько я понимаю у вас 3 списка разных типов элементов и заголовки между ними. Такая структура легко организуется на одном RecyclerView. Вам просто нужно в адаптере возвращать суммарное количество элементов и заголовков, переопределить метод getItemViewType, в котором возвращать тип элемента по позиции (у вас это видимо: заголовок, список1, список2 или список3). Под каждый тип элемента сделать отдельный ViewHolder и в методах onBindViewHolder и onCreateViewHolder создавать разные лайауты и по разному их наполнять в зависимости от их типа. Пример сходу смог найти только такой.

xkor
  • 5,011
  • Да, это решение выглядит более красивым и логичным, чем моё предположение. Только у меня 3 заголовка и 3 списка, но это не меняет сути. Благодарю за совет. – ivanovd422 May 16 '16 at 09:15
4
  1. Возьмите LinearLayout c вертикальной ориентацией и высотой в экран.
  2. Поместите в него TextView и RecyclerView в нужном кол-ве.
  3. Добейтесь нужного размещения последних на экране устанавливая им высоту через вес. Если будете устанавливать высоту в dp или WRAP_CONTENT, то на некоторых экранах просто всё не поместится. С другой стороны, при использовании веса на маленьких экранах всё будет очень мелко. Так что я бы на вашем месте так бы не делал, а выводил бы списке в отдельном фрагменте/диалоге вместо помещения их всех на один экран.
  • я вместо LinearLayout использую RelativeLayout, мне кажется, так легче и правильнее располагать элементы. А как быть с LayoutManager и Адаптерами для RecyclerView? Для каждого создавать новый адаптер ? – ivanovd422 May 16 '16 at 08:46
  • Может есть смысл использовать ScrollView, как контейнер для всех элементов? – ivanovd422 May 16 '16 at 08:52
  • @Denis422, Relative тут точно не нужен, плюс он прожорливее по ресурсам. Да, менеджеры и адаптеры должн быть свои для каждого списка. ScrollView использовать нельзя - будет конфликт и его без АЦЦЦКИХ костылей не обойти. Если очень надо - то сделайте лучше один список с разным типом элементов. То, что вы хотите сделать либо неправильно, либо некрасиво, либо невозможно без костылей. – ЮрийСПб May 16 '16 at 08:55
  • ScrollView уже попробовал и разочаровался) Я добавил еще одну картинку, чтобы было понятнее что я хочу. Всё таки один список с разными холдерами наверно лучше будет.. – ivanovd422 May 16 '16 at 09:04
  • Да, один список-лучшее решение – ЮрийСПб May 16 '16 at 09:36