Recycler View Горизонтальная прокрутка с 2 столбцами

Вот я пробовал до сих пор

LinearLayoutManager layoutManager =
        new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);

но он показал 2 строки вместо двух столбцов.

Как я могу показать два элемента с горизонтальной прокруткой с видом на переработку?


person Chhorn Soro    schedule 15.11.2017    source источник
comment
Вы хотите 2 столбца для каждого элемента RecyclerView?   -  person nhoxbypass    schedule 15.11.2017
comment
вы хотите, чтобы recyclarview был похож на игровой магазин. пожалуйста, попробуйте stackoverflow.com/questions/39870099/   -  person Payal Sorathiya    schedule 15.11.2017
comment
да, это то, что я хочу, но только 2 столбца   -  person Chhorn Soro    schedule 15.11.2017


Ответы (5)


Хорошо, вот фундамент,

Когда вы используете GridLayoutManager.HORIZONTAL, второй параметр будет рассматриваться как количество строк

в то время как, когда вы пишете GridLayoutManager.VERTICAL, второй параметр будет считаться количеством столбцов

Кроме того, это

LinearLayoutManager layoutManager =
        new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);

должно быть,

GridLayoutManager layoutManager =
            new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);

в приведенном выше коде 2 считается количеством генерируемых строк.

person Paresh P.    schedule 15.11.2017
comment
да, элемент показывает 2 столбца, но он не прокручивается по горизонтали, а прокручивается по вертикали. Вы понимаете, чего я хочу? - person Chhorn Soro; 15.11.2017
comment
Да, потому что вы объявили layoutManager как LinearLayoutManager. - person Paresh P.; 15.11.2017
comment
теперь я уже меняю его на GridLayoutManager и устанавливаю GridLayoutManager.HORIZONTAL. Теперь я могу отлично прокручивать свой продукт влево и вправо, но он показал один столбец с двумя строками. Я хочу 1 строку с 2 столбцами. Пожалуйста, помогите Спасибо - person Chhorn Soro; 15.11.2017

Недавно столкнулся с той же проблемой, которая закончилась созданием пользовательского GridLayoutManager, который позволил мне исправить количество строк и количество столбцов вместе.

Ссылка: -https://gist.github.com/KaveriKR/04bfef5ffc9c00a8b6fca503da497322

Этот пользовательский менеджер макетов использует generateDefaultLayoutParams и две другие функции для установки различных параметров макета для менеджера макетов.

person Kaveri    schedule 05.05.2020

Чтобы добиться того, что вам нужно, вам нужно объединить две вещи: настроить GridLayoutManager и настроить адаптер:

во Фрагменте/Действии:

 val snapHelper = PagerSnapHelper()
        snapHelper.attachToRecyclerView(recyclerView)

//Grid layout, 2 columns
        recyclerView.layoutManager =
            GridLayoutManager(this.context, 2, RecyclerView.HORIZONTAL, false)

а затем в вашем адаптере:

var displayMetrics = DisplayMetrics()
private var screenWidth = 0

в onCreateViewHolder:

(parent.context as MainActivity).windowManager.defaultDisplay.getMetrics(displayMetrics)
    screenWidth = displayMetrics.widthPixels

в onBindViewHolder:

    val itemPadding = 8

    //here you may change the divide amount from 2.5 to whatever you need 
    val itemWidth = (screenWidth - itemPadding).div(2.5)

    val layoutParams = holder.itemView.layoutParams
    layoutParams.height = layoutParams.height
    layoutParams.width = itemWidth.toInt()
    holder.itemView.layoutParams = layoutParams
person Pietrek    schedule 18.11.2019
comment
Я столкнулся с той же проблемой, и с этим ответом я смог решить проблему. Спасибо! - person Augusto Pinto; 29.10.2020

попробуйте ниже код

RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
    recyclerView.setLayoutManager(mLayoutManager);
person vishal jangid    schedule 15.11.2017

person    schedule
comment
Добро пожаловать в Stack Overflow. Ответы только на код, как правило, можно улучшить, добавив некоторое объяснение того, как и почему они работают. Для старых вопросов с существующими ответами также может быть полезно указать, к какому новому аспекту вопроса или усовершенствованной технике относится ваш ответ. - person Jason Aller; 03.08.2020
comment
Это не дает ответа на вопрос. Получив достаточную репутацию, вы сможете /comment">прокомментировать любой пост; вместо этого дайте ответы которые не требуют разъяснений от спрашивающего. – Из обзора - person wscourge; 03.08.2020