首页 > 解决方案 > 使用 RecyclerView 在屏幕上显示我的列表的特定数量

问题描述

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

我尝试了这个答案,但我的项目的高度被裁剪了,它对我不起作用。

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

标签: javaandroidandroid-recyclerviewandroid-viewholder

解决方案


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

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

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

  2. 我假设您没有使用任何模式(例如 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()

}

...

}

推荐阅读