使用 StaggeredGridLayoutManager 在 RecyclerView 上订购项目
Order items on RecyclerView using StaggeredGridLayoutManager
我正在创建一个应用程序,用户可以在其中创建带有图像的元素并将它们显示为列表。看起来像 Google Keep,其中创建的元素不具有相同的高度但具有相同的宽度,分布在两列中。元素的创建顺序很重要,必须按照从上到下的顺序排列。如图所示,每个数字代表元素创建的顺序,不是按照预期的顺序排列。
staggered view
有什么方法可以定义元素的排序方式吗?我想订购它们:
1 2
3 4
5
等等。
这是我初始化 RecyclerView、适配器和布局管理器的代码片段:
RecyclerView recyclerView = findViewById(R.id.recyclerView);
AdapterRecyclerView adapterRecyclerView = new AdapterRecyclerView(getContext(), list);
recyclerView.setAdapter(adapterRecyclerView );
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
我已经尝试过
staggeredGridLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
没用,我也试过了
staggeredGridLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
但它没有显示任何内容,只是一个空白布局。
编辑:任何其他的方式来做到这一点都将被提炼,一个图书馆,另一个想法,等等。
您可以尝试在元素上设置一个值来指示位置并在将其设置到适配器之前对列表进行排序。我建议您使用长值并在创建对象时使用 System.currentTimeMillis() 设置它,这样您将确保该值是唯一的并且将准确指示创建时间。
我正在创建一个应用程序,用户可以在其中创建带有图像的元素并将它们显示为列表。看起来像 Google Keep,其中创建的元素不具有相同的高度但具有相同的宽度,分布在两列中。元素的创建顺序很重要,必须按照从上到下的顺序排列。如图所示,每个数字代表元素创建的顺序,不是按照预期的顺序排列。
staggered view
有什么方法可以定义元素的排序方式吗?我想订购它们:
1 2
3 4
5
等等。
这是我初始化 RecyclerView、适配器和布局管理器的代码片段:
RecyclerView recyclerView = findViewById(R.id.recyclerView);
AdapterRecyclerView adapterRecyclerView = new AdapterRecyclerView(getContext(), list);
recyclerView.setAdapter(adapterRecyclerView );
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
我已经尝试过
staggeredGridLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
没用,我也试过了
staggeredGridLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
但它没有显示任何内容,只是一个空白布局。
编辑:任何其他的方式来做到这一点都将被提炼,一个图书馆,另一个想法,等等。
您可以尝试在元素上设置一个值来指示位置并在将其设置到适配器之前对列表进行排序。我建议您使用长值并在创建对象时使用 System.currentTimeMillis() 设置它,这样您将确保该值是唯一的并且将准确指示创建时间。