使用 RecyclerView 在屏幕上显示我的列表的特定数量

Posted

技术标签:

【中文标题】使用 RecyclerView 在屏幕上显示我的列表的特定数量【英文标题】:Show a specific number of my list on the screen using RecyclerView 【发布时间】:2020-03-22 23:32:29 【问题描述】:

我有一个列表,它的大小是 x 个数字。我想在屏幕上显示 6 个项目,即使用户滚动查看列表,它也应该在屏幕上显示 6 个项目。

我尝试了这个Answer,但我的项目的高度被裁剪了,它不适合我。

编辑我想像往常一样检索所有列表。我只想让屏幕携带 6 个项目。

【问题讨论】:

【参考方案1】:

//获取RecyclerView的引用

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

//设置一个6列的GridLayoutManager,垂直重力

GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(),6,LinearLayoutManager.VERTICAL,false); recyclerView.setLayoutManager(gridLayoutManager); // set LayoutManager to RecyclerView

【讨论】:

第一:我想垂直滚动第二:我将 LinearLayoutManager.VERTICAL 更改为 HORIZONTAL,每页有 6 个项目。但是我有一个隐藏的图像,它没有出现,因为项目具有固定的高度,并且项目变成了裁剪项目【参考方案2】:

在缺少代码的情况下,我只能假设您希望从 Api 或数据库等中获取 X 编号列表,并且您只想显示最多 6 个项目

到目前为止,查看您所做工作的一些代码会更容易,因此更正/建议将更适合您,在缺少代码的情况下,我给您一些建议:

    您的视图不应该知道如何处理数据,它应该只显示数据,在您的情况下,它应该接收 6 个项目并在视图中显示它们(在您的情况下为 recyclerView)。

    我假设您没有使用任何模式(如 MVVM 或 MVP),而您只是从 Activity 中的(api 或数据库)获取列表 - (额外提示 -> 使用某种架构总是更好设计将您的逻辑分离到 Presenter / viewModel 层以便以后进行单元测试)

假设您在 Activity 中定义您的适配器并传递您的列表,例如:

在你的活动中

var listOfAllYourItems =  arrayListOf(object1,object2,...,object100)
    val myAdapter = MyAdapter() 
    myAdapter.setItems(listOfAllYourItems.sublist(1,6)) //this will only pass the first 6 items
    the rest of normal stuff ...

所以这就像你只有 6 个项目并在 recyclerView 中显示它 - 简单(视图不包含任何关于如何处理超过 6 个项目等的逻辑,视图只知道如何显示项目而不应该关心如何处理其他)


加分: 您可以在视图中添加下一个/上一个按钮(可能在您的活动 xml 中的 RecyclerView 下面),然后向它们添加一些逻辑,以显示列表 onNextTapped 中的下 6 个项目或点击上一个按钮时的前 6 个项目,例如:

在你的活动中

    fun noNextTapped()
myAdapter.setItems(listOfYour6Items.sublist(6,12))
    //of course you need to add your logic to handle edge cases like what if the list size does not have enough items (like if it is only have 10 items) etc , and some other logic on how to know which page you are displaying so you can pass the correct number of items to the adapter onNextTapped fun (each page shows 6 items)   I leave those to you

    

在您的 MyAdapter 中:

class MyAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> 
    var list List<Objects> ;
fun setItems(new6Items : List<Objects>)
            list.clear()
            list.addAll(new6Items) 
            notifyDataSetChanged()



...


【讨论】:

感谢您的努力,我从您的回答中学到了很多东西。您只显示六个项目的答案。我的问题是,我想像往常一样显示所有列表,但是当用户滚动时,无论项目的高度,屏幕都应该携带 6 个项目。 np,对不起,我第一次没有理解你的问题(没有代码很难),我认为你真正想要的是一个活泼的回收器视图,检查这个***.com/questions/26370289/…(我个人不喜欢在屏幕中强制固定大小的项目,因为这取决于许多元素,例如如果列表中的项目大小不同会发生什么,如果屏幕大小发生变化,因为有许多具有不同宽度和高度的 android 设备)希望该链接对您有所帮助

以上是关于使用 RecyclerView 在屏幕上显示我的列表的特定数量的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView未正确显示消息列表

Android:在recyclerview下方显示按钮,但始终在屏幕上

浮动操作按钮未显示在 recyclerview 上(位于 DrawerLayout 内)

在 RecyclerView 中平均分配项目

Recyclerview没有显示cardview

RecyclerView 不显示从本地主机发送的 JSON 只是空白屏幕