Android Gridlayout管理器,每行具有不同的列号

Android Gridlayout管理器,每行具有不同的列号,android,android-recyclerview,gridlayoutmanager,Android,Android Recyclerview,Gridlayoutmanager,我需要一个在一行中具有不同列数的回收器视图。为此,我使用了具有动态跨度大小的gridlayout管理器。这是我的密码: rvSubCat.layoutManager = StaggeredGridLayoutManager(4, 1) val viewTreeObserver = rvSubCat.getViewTreeObserver() viewTreeObserver.addOnGlobalLayoutListener(ViewTreeObserver.On

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

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
    }
但预期的结果并不好。它是固定每行中的列数。我需要列的数量应该取决于行项目的总宽度

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

得到这个


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



根据文本大小进行调整。希望这有帮助

我使用的最佳轻量库

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()在列表从任何来源更改后。

我认为您应该使用标记视图库来实现这个好的解决方案,但我有一个要显示的回收器视图。我可以在回收器视图中添加流程布局吗?是的,可以,但是看到问题中的图像我想你不需要回收器视图,流程布局会自行处理,你只需要动态添加标记。我已经用我在项目中使用的另一个库更新了答案。很好的解决方案。但是回收器视图变为空白:(现在没有可见的数据它正在使用:flowLayoutManager.isAutoMeasureEnabled=trueGreat dude,我认为当您的项目高度或宽度与父项匹配时会发生此问题