Recyclerview - 加载所有项目而不滚动
Posted
技术标签:
【中文标题】Recyclerview - 加载所有项目而不滚动【英文标题】:Recyclerview - Loading all items without scrolling 【发布时间】:2021-10-08 08:57:52 【问题描述】:所以我有一辆这样的购物车。加载所有项目时计算总成本(左下角)。现在的问题是,如果不滚动,项目就不会加载。因此,初始总计仅显示在屏幕上可见的前 2 个项目。 如何加载所有项目而无需手动滚动?我尝试过自动滚动,但这不起作用;它滚动到底部,但总数不变。
请注意,这不仅仅是初始滚动。后来,随着我们上下滚动,总数不断增加。现在计算正在 onBindViewHolder 中完成,我知道每次滚动时都会调用它。我该如何避免呢?
我可以提供所有代码,但我不知道该发布哪个部分...
recyclerView = findViewById(R.id.recvwCartList)
val options: FirebaseRecyclerOptions<Cart> = FirebaseRecyclerOptions.Builder<Cart>()
.setQuery(cartRef.child(currentUserPhone).child("Products"), Cart::class.java)
.build()
adapter =
object : FirebaseRecyclerAdapter<Cart, CartViewHolder>(options)
override fun onBindViewHolder(
holder: CartViewHolder,
position: Int,
model: Cart
)
//initializations
imgbtnCartMinus = holder.ibCartMinus
imgbtnCartPlus = holder.ibCartPlus
txtvwCartTotalAmount = findViewById(R.id.txtvwCartTotalAmount)
//assigning values
holder.tvProductName.text = model.productName
holder.tvProductPrice.text =
resources.getString(R.string.rupee_symbol, model.price)
holder.tvCartProductQuantity.text = model.quantity
我应该如何在这里得到总数?
【问题讨论】:
这是一个违背工作原理的要求。为什么会有这样的要求? 第一次使用recyclerview。我不知道这一切。 使用 Recyclerview 加载新项目时会加载。 【参考方案1】:我认为,您需要更改基于滚动计算总数的应用程序逻辑,因为用户期望购物车产品的全部价值,而 RecyclerView 顾名思义只保留可见的视图和当视图离开屏幕时销毁并重新创建视图,以某种方式回收它们以防止过度使用内存,因此当您将所有产品的列表添加到您的 RecylerView.Adapter
后代时,您也应该添加所有项目的成本,因为所有项目的清单都是事先已知的
【讨论】:
知道如何使用 FirebaseRecyclerOptions 吗? @whoadityanawandar 恐怕你不能用FirebaseRecyclerOptions
类来做到这一点,因为它只是为了减少样板而进行的通用操作。原因是所有数据获取都由FirebaseRecyclerOptions
自己处理,对于您的情况,我们将需要事先获取数据,因此请确保您单独获取数据,当您收到数据时,您可以使用@987654324 更新您的适配器@
普通的RecyclerView
和Adapter
是所有android 开发人员必须知道的最常见的事情,因此您应该探索一下。只是一个建议
我必须在设置适配器之前更改逻辑并在 onCreate 中计算总数。【参考方案2】:
你不需要使用 FirebaseRecycleOptions ,如果我建议你计算所有项目的总和并显示它,即使你不滚动
【讨论】:
没有 FirebaseRecyclerOpitions 我该怎么做? 是的,您需要 FirebaseRecyclerOpitions。抱歉,现在我看到了代码。这是一个 github 存储库,可帮助您在将其发送到 recyclerview github.com/OtnielaSolofo/sum_recyclerview.git 之前计算数量 关键是在将数据发送到回收站视图之前,您应该拥有所有数据 正是我的问题;在将其发送到回收站视图之前,我如何拥有所有数据?!图书馆里什么都没有??! 你可以重新测试,因为我已经推过了【参考方案3】:无论屏幕上显示什么,您都应该提前轮询一次 Firebase 数据库并计算总数。从软件工程师的角度来看,您尝试执行的这种逻辑实际上没有意义。
我会计算负载价格,然后在每次新添加或更改时重新计算并显示该价格(可能会通过 Observable 和 Databinding 将其连接起来)。您的布局根本不应该影响业务逻辑。
【讨论】:
我现在明白了,问题是我不知道如何使用 FirebaseRecyclerOptions 来做到这一点。 我认为您需要查看 Firebase DB 文档。我不太熟悉它的帮助,但我相信这不是你需要的课程。根据谷歌搜索,这是一个基本连接数据库和 UI 的辅助类。我认为您需要以其他方式查询您的数据库。【参考方案4】:在 onBindViewHolder 中计算的任何特殊原因? 当您获得项目列表数据时,应运行总计计算。 对 recyclerView 的依赖确实看起来不太好。
假设没有 RecyclerView 并更改计算逻辑
【讨论】:
以上是关于Recyclerview - 加载所有项目而不滚动的主要内容,如果未能解决你的问题,请参考以下文章
如何使Horizontal Recyclerview无限滚动而不滚动回第一项