我正在尝试使用此代码验证 recyclerView 中位置为 1 的项目是否获得焦点
myRecyclerView {
childAt<ViewType>(1) {
isFocused()
}
}
项目重点突出,测试成功,大家都很高兴 然后我决定尝试一下这个
myRecyclerView {
childAt<ViewType>(2) {
isFocused()
}
}
预计测试会失败,没想到测试成功了,我在模拟器中发现焦点1位置后焦点转到位置2,测试成功 所以我注意到这个调用
childAt<StartPageScreen.InstalledAppsItem>(x) {
fun()
}
请求位置x的焦点,然后执行fun(),所以用这种方式检查孩子是否焦点是无意义的, 我检查了
childAt
功能代码并发现了
inline fun <reified T : KRecyclerItem<*>> childAt(position: Int, function: T.() -> Unit) {
val provideItem = itemTypes.getOrElse(T::class) {
throw IllegalStateException("${T::class.java.simpleName} did not register to KRecyclerView")
}.provideItem
try {
scrollTo(position)
} catch (error: Throwable) {
}
function((provideItem(PositionMatcher(matcher, position)) as T).also { inRoot { withMatcher([email protected]) } })
}
所以基本上我首先滚动到位置 x 然后运行我的函数 所以我的问题是有没有一种有效的方法来测试回收器视图项目是否具有焦点?
注意:我在 Android 电视上运行并通过远程导航,而不是在移动设备上运行