Espresso:Recyclerview滚动到结束

Shi*_*tav 9 android android-espresso android-recyclerview

有没有办法使用Espresso滚动到recyclerview的末尾?

有一个带文字的项目,我们说'Text XYZ',而recyclerview有一个id recycleler_view.此项恰好是回收站视图的最后一项.

我试过了

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

但这似乎不起作用.有任何想法吗?

Be_*_*ive 14

RecyclerViewActions.scrollTo()针对匹配ItemViewViewHolder,这是在充气onCreateViewHolder()适配器的.为了scrollTo()使其工作,您需要提供唯一标识的匹配器ItemView.

你当前的匹配器告诉espresso滚动到一个用a TextView作为膨胀的ViewHolder itemView.这可能会发生,但通常你会ViewGroup采取一些行动,以你想要的方式为视图持有者设计风格.

如果更改scrollTo()匹配器,则hasDescendant(withText("Text XYZ"))考虑所有嵌套布局(如果有多个).

另外请记住,因为您还试图单击该项目 - 您不能同时执行该项目,perform()因为它会将点击发送到当前ViewInteraction,在这种情况下是RecyclerView带有id的R.id.recycler_view.在同一个执行中执行此操作只需单击中间RecyclerView,而不是您滚动到的项目.

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

如果是另一个onView()语句,hasDescendant(withText("Text XYZ"))则会失败,因为它会找到该TextView的所有父项(viewholder,recyclerview,包含recyclerview的视图组等),因为它们都有这个特殊的后代.这将强制您使ItemView匹配器更精确并考虑所有嵌套布局.我通常去匹配器是withChild()在这些情况下,但它可能会有所不同.