我想用声音依次突出显示单行 recyclerview 并将突出显示行滚动到屏幕顶部这就是我所做的:
这里是它的代码:
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 并导致应用程序崩溃。
现在
如何修复 recyclerview.getchildAt(4) 或 recyclerview.getchildAt(5) 返回 null 且 getChildAt(position) 返回 n-1 行的应用程序崩溃,因此无论如何都会发生 recyclerview.getchildAt(5) 处的应用程序崩溃,但我想要 n 行,因为我想突出显示所有行
如何将突出显示的行滚动到位置 0(顶部) 即第 0 行从屏幕上升,第 1 行占据该位置,依此类推...
我想实现这样的目标,突出显示的行位于顶部,当突出显示另一行时,该行将从屏幕上消失
最佳答案
您需要时间让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/