java - 如何突出显示回收器 View 的单行或项目并将突出显示的行滚动到屏幕顶部

标签 java android kotlin android-studio-3.0

我想用声音依次突出显示单行 recyclerview 并将突出显示行滚动到屏幕顶部这就是我所做的:

screenshot

这里是它的代码:

 fun AnimateToSurahAlFeel(recyclerView: RecyclerView, layoutManager: LinearLayoutManager, currentPosition: Int) {

        var position: Int = currentPosition / 1000


        when (position) {


            0 -> {
                recyclerView.smoothScrollToPosition(0)
                recyclerView.getChildAt(0).isSelected = true

            }
            4 -> {
                recyclerView.smoothScrollToPosition(1)
                recyclerView.getChildAt(0).isSelected = false
                recyclerView.getChildAt(1).isSelected = true
            }
            11 -> {
                recyclerView.smoothScrollToPosition(2)
                recyclerView.getChildAt(1).isSelected = false
                recyclerView.getChildAt(2).isSelected = true
            }
            17 -> {
                recyclerView.smoothScrollToPosition(3)
                recyclerView.getChildAt(2).isSelected = false
                recyclerView.getChildAt(3).isSelected = true
            }
            21 -> {
                recyclerView.smoothScrollToPosition(4)
                recyclerView.getChildAt(3).isSelected = false
                recyclerView.getChildAt(4).isSelected = true
            }
            28 -> {
                recyclerView.smoothScrollToPosition(5)
                recyclerView.getChildAt(4).isSelected = false

                if (recyclerView.getChildAt(5) != null)
                    recyclerView.getChildAt(5).isSelected = true
            }

        }
    }

在函数中currentPosition是媒体播放器当前位置

这段代码的问题是:

在屏幕截图中,第 4 行和第 5 行当前不可见,当突出显示第 4 行和第 5 行时,应用程序崩溃并给出空指针异常,据我所知,这两行尚未创建,这就是原因

recyclerview.getChildAt(4)recyclerview.getChildAt(5) 返回 null 并导致应用程序崩溃。

现在

  1. 如何修复 recyclerview.getchildAt(4) 或 recyclerview.getchildAt(5) 返回 null 且 getChildAt(position) 返回 n-1 行的应用程序崩溃,因此无论如何都会发生 recyclerview.getchildAt(5) 处的应用程序崩溃,但我想要 n 行,因为我想突出显示所有行

  2. 如何将突出显示的行滚动到位置 0(顶部) 即第 0 行从屏幕上升,第 1 行占据该位置,依此类推...

我想实现这样的目标,突出显示的行位于顶部,当突出显示另一行时,该行将从屏幕上消失

picture

最佳答案

您需要时间让View 进行绑定(bind)。只是为了前任。您可以发布操作。

....
 17 -> {
                recyclerView.smoothScrollToPosition(3)
                new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {

                      recyclerView.getChildAt(2).isSelected = false
                      recyclerView.getChildAt(3).isSelected = true
                }, 500);
            }
....

但我强烈建议您使用一些状态集合,它将保存和处理您的运行和显示 View 的状态。

关于java - 如何突出显示回收器 View 的单行或项目并将突出显示的行滚动到屏幕顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50803733/

相关文章:

java - 防止针对jsp页面中的跨站点脚本进行XSS攻击

android - Linux 内核支持从已连接的 SSID 网络计算 802.11 信标吗?

android:发送带有自定义操作的 facebook 帖子

java - android中更改wifi时如何获取连接的wifi ssid

java - setPixel 在位图周围留下黑色边框,如何避免?

java - 通过套接字发送 1 个大数据包比发送几个小数据包更好吗? java

javascript - Android + Linux Chroot + Node.js = 在手机上运行您的 node.js 应用程序

kotlin - 使用 Kotlin/Native,如何执行外部操作系统可执行文件或 $PATH 命令并与其 stdin、stdout 和 stderr 流交互?

function - Kotlin:将对象列表转换为对象属性映射

kotlin 当有主题时应该使用