- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 RecyclerView 和相应的 LinearLayoutManager。我在我的应用程序的一部分中添加了一些自定义滚动功能,我将在其中翻译自定义 header 对象以及根据此项目建模的 RecyclerView 的滚动:https://github.com/boxme/ParallaxHeaderViewPager (它使用 ListView 而不是 RecyclerView)。
不过我遇到了一个奇怪的问题。它可以很好地滚动一段时间,但随后会跳动几百个像素。我添加了日志语句来查看 LinearLayoutManager.computeVerticalScrollOffset() 计算的偏移量,因为我确实滚动了,偏移量从 320 左右随机跳到 1200,然后它将继续从该点开始适本地计算偏移量。
请参阅下面的回答,了解我是如何解决这个问题的!
最佳答案
多亏了这个线程终于找到了一种准确解决这个问题的方法,在覆盖的 LinearLayoutManager 的代码下面发布,抱歉它的 kotlin :(,你也可以在 more detail here 中阅读相关内容
class LinearLayoutManagerWithAccurateOffset(context: Context?) : LinearLayoutManager(context) {
// map of child adapter position to its height.
private val childSizesMap = mutableMapOf<Int, Int>()
override fun onLayoutCompleted(state: RecyclerView.State?) {
super.onLayoutCompleted(state)
for (i in 0 until childCount) {
val child = getChildAt(i)
childSizesMap[getPosition(child)] = child.height
}
}
override fun computeVerticalScrollOffset(state: RecyclerView.State?): Int {
if (childCount == 0) {
return 0
}
val firstChildPosition = findFirstVisibleItemPosition()
val firstChild = findViewByPosition(firstChildPosition)
var scrolledY: Int = -firstChild.y.toInt()
for (i in 0 until firstChildPosition) {
scrolledY += childSizesMap[i] ?: 0
}
return scrolledY
}
}
更新
请注意,这不支持保存状态,因此在配置更改/从进程死亡中恢复时,状态将不同步并且滚动看起来很奇怪,解决此问题的方法是存储 childSizesMap
通过覆盖 onSaveInstanceState
关于android - RecyclerView LinearLayoutManager computeVerticalScrollOffset() 没有返回正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361403/
我正在尝试制作类似于 Instagram 过滤器布局的布局。基本上,当您选择一个过滤器时,它会滚动到您选择的项目 + 1,向您显示还有更多过滤器。 我目前正在尝试为我的水平 RecyclerView
在 GridLayoutManager 中,我能够设置跨度计数,这使得 View 内的项目可以调整大小,以便能够水平适应该跨度计数。 我有一个 LinearLayoutManager,我想以同样的方式
我有一个在 fragment 中实现的 RecyclerView,我正在尝试向代码中添加分隔符。我让 RecylcerView 按预期工作,但 LinearLayoutManager 无法解析 get
我需要修改与 RecyclerView 一起使用的垂直 LinearLayoutManager 以便它可以水平滚动。 当 RecyclerView 垂直滚动时,它会添加新项目,因为我正在扩展 Line
我的 Activity 正在显示一个带有 LinearLayoutManager 的 RecyclerView。我想获取列表中的第一项 (View)。根据this post's accepted an
我正在尝试做这样的事情: RecyclerAdapter recyclerAdapter; LinearLayoutManager recyclerManager; //set items.... r
我的 LinearLayoutManager 有一个错误,当我运行这段代码时它说 error: incompatible types: NotificationFragment cannot be c
我想将 RecyclerView 滚动到某个位置,我使用 LinearLayoutManager.scrollToPositionWithOffset() 滚动,但它不起作用。谁能帮帮我? 我的代码:
我开始使用 Kotlin 构建一个电影数据库应用程序,这是基于我在网上找到的教程(详见 this link。在构建电影 fragment 文件时,我注意到一个“未解析的引用:LinearLayoutM
我想要一个顶部有标题的 ListView 样式的 RecyclerView,并且我不希望标题 View 被回收,永远。 我对 RecyclerView 和 LinearLayoutManager 是全
我正在尝试新的 RecyclerView 结合 LayoutManager 和 LinearLayoutManager 的标准实现。我的目标是让 LayoutManager 在设备处于纵向时水平绘制我
我正在使用 RecyclerView 和相应的 LinearLayoutManager。我在我的应用程序的一部分中添加了一些自定义滚动功能,我将在其中翻译自定义 header 对象以及根据此项目建模的
我基本上是在尝试实现这个设计原则(from Google's Material Design): 因此,我创建了一个带有 LinearLayoutManager 的父级 RecyclerView,然后
除了这两个,我可以从 Android 库中导入其他所有内容。我正在尝试从 android.support.v7.widget 导入它们,但这不起作用,但是从 android.support.v4.wi
这似乎是一个简单的解决方案,但似乎设置 private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; priva
目前我正在使用以下代码来检查是否应该启用 SwipeRefreshLayout。 private void laySwipeToggle() { if (mRecyclerView.getCh
我有一个项目列表。这些项目按日期排序。日期早于现在的项目(“旧”项目)在用户打开应用程序时不应该可见,但用户应该能够通过将列表滚动到顶部来查看它们。 我找到第一个带有 future 日期的项目("ne
IllegalArgumentException: LinearLayoutManager is already attached to a RecyclerView 当我尝试为我的 Recycler
我有一个 fragment ,其中有 RecyclerView 和 LinearLayoutManager,其中有 CardView 项。单击项目应滚动到顶部有一个 float 操作按钮。我已经尝试使
是否可以与 RecyclerView 中的项目重叠? 我正在尝试使用 LinearLayoutManager。 我的要求与 LinearLayoutManager 中的要求相同,只需将内部的项目从上到
我是一名优秀的程序员,十分优秀!