当前位置: 首页 > 知识库问答 >
问题:

在RecyclerView.OnScrollListener中设置视图的可见性时的性能

东门仲卿
2023-03-14

我有一个recyclerView,希望在用户滚动时设置文本并更改TextView的可见性。在用户停止滚动后,视图应该显示一秒钟,然后停止。为此,我有一个RecyclerView.onScrollListener。我的代码如下所示:

var scrollJob = Job()
var tempText = ""

recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        super.onScrolled(recyclerView, dx, dy)
        if (dx != 0 || dy != 0) {
            val someText = // compute text from ViewHolder
            scrollTextView.visibility = View.VISIBLE
            if (someText != tempText) {
                scrollTextView.text = someText
                tempText = someText
            }
        }
    }

    override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
        super.onScrollStateChanged(recyclerView, newState)
        when (newState) {
            RecyclerView.SCROLL_STATE_SETTLING -> Log.d("TAG", "state: settling")
            RecyclerView.SCROLL_STATE_IDLE -> {
                scrollJob.cancel()
                scrollJob = lifecycleScope.launch {
                    delay(1000)
                    scrollTextView.visibility = View.GONE
                }
            }
            RecyclerView.SCROLL_STATE_DRAGGING -> scrollJob.cancel()
        }
    }
}

代码运行得很好,我只是在想,如果我不应该在onscrold中做那么多事情,因为旧的手机可能会有这样的问题。scroll_state_dragging的问题是,即使不需要也会调用它。

共有1个答案

闻人博
2023-03-14

当然,您需要获得scrollTextView的可见性,如果不可见或消失,您将使它可见。如果已经可见,则不需要使其可见...

if (scrollTextView.getVisibility() != View.VISIBLE)
scrollTextView.visibility = View.VISIBLE

在每种情况下都做同样的,这将改善你的表现!

 类似资料:
  • 大家好,我有一个关于forloop和在forloop中将numericupdowns的可见性设置为true的问题。这就是我想要完成的: 这就是我想要做的: 这有可能吗?怎么做?事先谢谢你

  • 我有一个布局,即MotionLayout,它必须为我定义了motionscene约束集开始和结束的FrameLayouts。并且它们是正确的动画。 然后,在这个动画框架布局下,我添加了两个文本视图,在单击时,我尝试隐藏一个,显示另一个,但两个都保持可见 重写有趣的onViewCreated(View:View,SavedInstanceState:Bundle?){super.onviewcrea

  • 尝试使用自定义变量设置的可见性,但发生错误:。是否可以使用数据绑定设置视图可见性?多谢了。

  • 在Enterprise Architect中,可以在特定的关系图中隐藏连接器。开发外接程序(扩展),我需要通过“代码”执行这样的动作,但是我找不到连接器/关系图类的相应属性。 如果有人能帮助找到设置连接器可见性的相关属性,我将不胜感激。

  • 我有一个ViewPager与3片段。它们中的每一个都包含相同的视图,并且当片段对用户可见时,视图会动画。我重写setUserVisibleHint启动动画。当我滑动到片段时,视图仍然存在一秒钟,消失,然后开始动画。当视图不可见时,我想完全删除它们,当滑动到片段时,它们变得可见,动画开始。基本上,当参数为false时,我试图将它们隐藏在setUserVisibleHint中。这没什么用。即使片段不可

  • 大家好,我对进度条有问题。我试着做一个画廊视图,所有的图像都显示在网格视图中。但问题是,当所有的图像都被加载时,进度条并没有消失,请检查我使用旋转加载作为进度条的代码 已更新 这是xml 请解决这个问题。