2列的Recycler View水平滚动

Chh*_*oro 4 android recycler-adapter android-recyclerview recyclerview-layout

到目前为止我已经尝试过了

LinearLayoutManager layoutManager =
        new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);
Run Code Online (Sandbox Code Playgroud)

但它显示2行而不是两列。

如何在回收者视图中以水平滚动显示两个项目?

Par*_* P. 7

好了,这里是一个基础

使用时GridLayoutManager.HORIZONTAL,第二个参数将被视为行数

同时,当您编写GridLayoutManager.VERTICAL第二个参数时,将被视为列数

还有这个

LinearLayoutManager layoutManager =
        new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);
Run Code Online (Sandbox Code Playgroud)

应该是,

GridLayoutManager layoutManager =
            new GridLayoutManager(getActivity(), 2, GridLayoutManager.HORIZONTAL, false);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,将2视为要生成的行数。

  • 现在我已经将其更改为 GridLayoutManager 并设置 GridLayoutManager.HORIZONTAL。现在我可以完美地左右滚动我的产品,但它显示一列两行。我想要的是 1 行 2 列。请帮忙谢谢 (2认同)

Pie*_*rek 7

为了实现你所需要的,你需要结合两件事:设置 GridLayoutManager 和设置适配器:

在片段/活动中:

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

//Grid layout, 2 columns
        recyclerView.layoutManager =
            GridLayoutManager(this.context, 2, RecyclerView.HORIZONTAL, false)
Run Code Online (Sandbox Code Playgroud)

然后在你的适配器中:

var displayMetrics = DisplayMetrics()
private var screenWidth = 0
Run Code Online (Sandbox Code Playgroud)

在 onCreateViewHolder 中:

(parent.context as MainActivity).windowManager.defaultDisplay.getMetrics(displayMetrics)
    screenWidth = displayMetrics.widthPixels
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)


vis*_*gid 0

尝试下面的代码

RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
    recyclerView.setLayoutManager(mLayoutManager);
Run Code Online (Sandbox Code Playgroud)