我有回收站视图与自定义拇指颜色的垂直滚动条:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/messages_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:scrollbarThumbVertical="@color/orange"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:stackFromEnd="true" />
在Recycler View中我显示文本消息。我需要显示消息发送/接收的时间,因此我将时间戳存储在Recycler的dto中:
data class MessageRecyclerDto(
val sendTs: Long,
...
)
我在onBindViewHolder方法中从当前时间减去时间戳,以计算已经过去了多少时间,并每分钟刷新回收器数据,以显示更新后的文本:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position))
}
class ViewHolder(
private val binding: RecyclerItemChatMessageBinding
) : RecyclerView.ViewHolder(binding.root) {
fun bind(dto: MessageRecyclerDto) {
val minutesAgoText = (System.currentTimeMillis() - sendTs).millisToMinutes().toString()
binding.timeAgoTv.text = minutesAgoText binding.executePendingBindings()
}
}
问题是每次我调用适配器的notifyItemRangeChanged或notifyDataSetChanged方法时,回收器视图中的滚动条会出现一会儿,然后消失一会儿。这是滚动操作的默认行为。此外,我在同一个Fragment中有另一个回收器视图,滚动条也会出现在其中。回收器视图不相关,它们有不同的适配器。
我不想完全隐藏滚动条,也不想一直显示滚动条。有什么办法可以禁用这种行为吗?或者有人有其他解决方案,可以在回收者视图中显示经过的时间,并定期刷新。
1条答案
按热度按时间sd2nnvve1#
如果你想滚动条只显示当用户拖动这张表你应该做它手动(禁用/启用滚动条).
你需要添加
addOnScrollListener
和检测滚动,以启用滚动条之前notifyDataSetChanged
禁用滚动条.类似这样的东西:并在呼叫更改之前禁用它: