Android RecyclerView OnScrollListener onScrolled 函数和 ViewBinding 可见性问题

问题描述 投票:0回答:0

当我尝试在屏幕上显示一个将 RecyclerView 向上滚动的 ImageButton 时,我遇到了以下代码的奇怪行为。

        myViewManager = LinearLayoutManager(context)
        val minimumScrollPosition = if(resources.getBoolean(R.bool.is_tablet)) 12 else 7

        binding.myRecyclerview.apply {
            layoutManager = myViewManager
            setHasFixedSize(true)
            addOnScrollListener(object : RecyclerView.OnScrollListener() {
                override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                    Log.d(TAG, "Position scrolled: ${(recyclerView.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()}")
                    if((recyclerView.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition() >= minimumScrollPosition) {
                        binding.scrollToTopButton.visibility = View.VISIBLE
                    } else {
                        binding.scrollToTopButton.visibility = View.GONE
                    }
                }
            })
        }

这个recyclerview的适配器设置在代码的后面部分;这一切都位于 Fragment 的 onViewCreated 函数中。虽然这在第一次访问该片段时确实有效,但如果我要从前面的页面向后导航(点击 recyclerview 内的一行时的详细信息页面),代码确实满足该条件,但无法制作图像按钮通过视图绑定可见;如果我也使用 view.findViewById 方法,这也适用。

在此之后还有一个奇怪的行为,如果 recyclerview 至少一次将 findFirstVisibleItemPosition 视为 minimumScrollPosition,则按钮确实会通过此 onScrollListener onScrolled 函数回调出现;如果我要向后导航并让 recyclerview 在向前导航之前被点击的位置开始,尽管满足 onScrolled 函数回调中的条件,但按钮不会出现。

我希望有人向我解释这个问题,以及我可以采取的任何补救措施。

android kotlin android-recyclerview android-viewbinding onscrolllistener
© www.soinside.com 2019 - 2024. All rights reserved.