Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 浓缩咖啡:循环查看滚动至结尾_Android_Android Recyclerview_Android Espresso - Fatal编程技术网

Android 浓缩咖啡:循环查看滚动至结尾

Android 浓缩咖啡:循环查看滚动至结尾,android,android-recyclerview,android-espresso,Android,Android Recyclerview,Android Espresso,有没有办法用浓缩咖啡滚动到recyclerview的末尾 有一个带有文本的项目,比如说“text XYZ”,recyclerview有一个id recycler\u视图。此项恰好是recycler视图的最后一项 我试过了 onView(withId(R.id.recycler_view)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(withText("Text XYZ")),click()); 但这似乎

有没有办法用浓缩咖啡滚动到recyclerview的末尾

有一个带有文本的项目,比如说“text XYZ”,recyclerview有一个id recycler\u视图。此项恰好是recycler视图的最后一项

我试过了

onView(withId(R.id.recycler_view)).check(matches(isDisplayed())).perform(RecyclerViewActions.scrollTo(withText("Text XYZ")),click());

但这似乎不起作用。有什么想法吗?

RecycleServiceActions.scrollTo()
ViewHolder
ItemView
匹配,后者在适配器的
onCreateViewHolder()
中膨胀。为了使
scrollTo()
正常工作,您需要提供一个匹配器来唯一地标识
ItemView

您当前的匹配者告诉espresso滚动到一个视图架,该视图架以
文本视图
作为
项目视图
充气。这可能会发生,但通常您会在那里执行一些
ViewGroup
操作,以按照您希望的方式设置视图持有者的样式

如果您将
scrollTo()
Matcher更改为
hasgendant(withText(“Text XYZ”))
以说明所有嵌套布局(如果有多个)

还请记住,因为您也在尝试单击该项目-您不能在相同的
perform()
中执行,因为它会将单击发送到当前的
ViewInteraction
,在本例中,它是一个id为
R.id.recycler\u视图的
RecyclerView
。在同一执行中执行此操作时,只需单击
RecyclerView
的中间部分,而不是您滚动到的项目

要解决此问题,您需要使用另一个
onView()
和用于滚动到项目的匹配器,或者使用
RecyclerView.actionItem()


在另一个
onView()
语句中,
hassgender(withText(“Text XYZ”))
将使您失败,因为它将找到该TextView的所有父级(viewholder、recyclerview、保存recyclerview的viewgroup等),因为它们都有此特定的子级。这将迫使您使
ItemView
匹配器更加精确,并考虑所有嵌套布局。在这些情况下,我通常使用的匹配器是
withChild()
,但对您来说可能会有所不同。

即使这种方法不显示向上滚动,但允许您选择回收器的位置。 多亏了这个家伙(我用了这个方法:

onView(allOf(withId(R.id.recyclerUserCustomListsView)))

.perform(RecycleServiceActions.ActionOnItemPosition(7,click());

如果您知道
RecycleView
的最后一个位置,则可以滚动到它

static final int LAST_POSITION = 100;

// First method
onView(withId(R.id.recyclerview))
    .perform(RecyclerViewActions.scrollToPosition((LAST_POSITION)));

// Second method
onView(withId(R.id.recyclerview))
        .perform(actionOnItemAtPosition(LAST_POSITION, scrollTo()));

似乎不起作用-错误日志请在滚动到视图之前检查视图是否显示。@denys ckeck用于实际的recyclerview。除非没有实际显示recyclerview,否则不会有任何区别。是的,有意义。太棒了,谢谢,效果很好!应该是smth类似于此onView(带id(R.id.rvSettings)).check(匹配项(isDisplayed()).perform(RecycleServiceActions.scrollTo(带文本(stringId)));onView(带id(R.id.recycler_视图)).perform(RecycleServiceActions.scrollTo(带文本(getString(stringResId)));onView(带文本(getString(stringResId)))。perform(单击());