onView(withId(R.id.recycler_view))
.perform(
RecyclerViewActions.actionOnItemAtPosition<CustomAdapter.CustomViewHolder>(
1,
longClick()
)
)
onView(withId(R.id.recycler_view))
.perform(
RecyclerViewActions.actionOnItemAtPosition<CustomAdapter.CustomViewHolder>(
2,
longClick()
)
)
onView(withId(R.id.recycler_view))
.perform(
RecyclerViewActions.actionOnItemAtPosition<CustomAdapter.CustomViewHolder>(
1,
longClick()
),
RecyclerViewActions.actionOnItemAtPosition<CustomAdapter.CustomViewHolder>(
2,
longClick()
)
)
@get:Rule
var activityTestRule = ActivityTestRule(
ListActivity::class.java,
true,
false
)
然后,在每个@test方法中,我调用activitytestrule.launchactivity(Intent.action_main)),然后进行单击。我发现,只有第一次点击不起作用,但第二次和第三次点击起作用。那么,这种行为的原因又能是什么呢?
我找到了问题的原因。我在我的循环视图项中的布局内有一个视图。这个视图实现WebView,它加载一些标记文本。加载需要一些时间,所以我的点击是在视图真正呈现之前执行的。下面是使测试工作的代码示例:
onView(withId(R.id.recycler_view))
.perform(
waitForMillis(1500),//wait until markdown views loaded
actionOnItemAtPosition<CustomAdapter.CustomViewHolder>(1, longClick()),
actionOnItemAtPosition<CustomAdapter.CustomViewHolder>(2, longClick())
)
其中waitForMillis()是自定义动作
fun waitForMillis(millis: Long): ViewAction? {
return object : ViewAction {
override fun getConstraints(): Matcher<View> {
return isDisplayed()
}
override fun getDescription(): String {
return "Wait for $millis milliseconds."
}
override fun perform(uiController: UiController, view: View) {
uiController.loopMainThreadForAtLeast(millis)
}
}
}
这种解决方案有缺点。为了确保视图会在点击之前呈现,你需要设置固定的时间,这可能会比呈现真正需要的时间更多。所以最好的解决方案是自定义匹配器,但我现在没有现成的例子。
如果用户点击一个,我希望它做一些事情,也为两个和三个。我如何实现这一点?
请帮助如何使其工作
单击时的卡片视图正在工作。但回收器视图的区域不可单击。如何使其可点击,以便捕获卡片视图的事件。
我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件
我有音频播放器布局作为一个项目在回收器视图。我想播放图标改变为暂停图标在图标点击。日志显示图标已经设置,但图标在回收器视图中的外观没有改变。 我的代码: 我实际上有一个线性布局音频项目。我正在设置onClickListener()no一个ImageButton来将其背景从play更改为pause。 额外信息: 我观察到第一次点击图标并没有什么作用。 第二次点击它会将它改变为暂停图标,但它会迅速返回