每行中具有不同列号的网格布局管理器

Gridlayout manager with different column numbers in each row

我需要一个在一行中具有不同列数的回收器视图。为此,我使用了具有动态跨度大小的网格布局管理器。这是我的代码:

rvSubCat.layoutManager = StaggeredGridLayoutManager(4, 1)
        val viewTreeObserver = rvSubCat.getViewTreeObserver()
        viewTreeObserver.addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener { calculateSize() })
        categoryAdapter = CategoryAdapter(categoryList, true, this)
        rvSubCat.adapter = categoryAdapter


 private fun calculateSize() {
        val spanCount = Math.floor((rvSubCat.getWidth() / SizeUtils.dp2px(sColumnWidth.toFloat())).toDouble()).toInt()
        (rvSubCat.getLayoutManager() as StaggeredGridLayoutManager).spanCount = spanCount
    }

但是想要的结果并不好。它正在固定每行中的列数。我需要的列数应取决于行项目的总宽度。

需要这个(期望的结果):

得到这个

你需要的是流式布局。我认为这些库将帮助您解决问题:

https://github.com/nex3z/FlowLayout
https://github.com/ApmeM/android-flowlayout

根据文字大小调整。希望这有帮助!

我使用的最好的轻量级库

compile 'com.xiaofeng.android:flowlayoutmanager:1.2.3.2'

好处是你不需要改变你现有的代码,你只需要改变 recyclerview 的 LayoutManager 就像

recyclerView.setLayoutManager(new FlowLayoutManager());

大功告成,祝编码愉快:)

更新 您已经知道如何填充回收站视图。但是通过以下

进行验证
private void setAdapter() {
    recyclerView = (RecyclerView) fragment_view.findViewById(R.id.rv);
    recyclerView.setLayoutManager(new FlowLayoutManager());
    myRecyclerAdapter = new AdapterOrders(getActivity(), list);
    recyclerView.setAdapter(myRecyclerAdapter);
}

从任何来源更改列表后调用 myRecyclerAdapter.notifyDataSetChanged();