【发布时间】:2016-05-18 07:27:48
【问题描述】:
看起来CoordinatorLayout 破坏了 Espresso 操作的行为,例如 scrollTo() 或 RecyclerViewActions.scrollToPosition()。
NestedScrollView 的问题
对于这样的布局:
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
...
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
...
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
如果我尝试使用ViewActions.scrollTo() 滚动到NestedScrollView 中的任何视图,我发现的第一个问题是我得到了PerformException。这是因为这个动作只支持ScrollView 而NestedScrollView 没有扩展它。 here解释了这个问题的解决方法,基本上我们可以复制scrollTo()中的代码并更改约束以支持NestedScrollView。如果NestedScrollView 不在CoordinatorLayout 中,这似乎可行,但只要将其放入CoordinatorLayout 中,滚动操作就会失败。
RecyclerView 的问题
对于相同的布局,如果我将NestedScrollView 替换为RecyclerView,滚动也会出现问题。
在这种情况下,我使用的是RecyclerViewAction.scrollToPosition(position)。与NestedScrollView 不同,在这里我可以看到发生了一些滚动。但是,它看起来像滚动到错误的位置。例如,如果我滚动到最后一个位置,它会显示倒数第二个而不是最后一个。当我将RecyclerView 移出CoordinatorLayout 时,滚动工作正常。
由于这个问题,目前我们无法为使用 CoordinatorLayout 的屏幕编写任何 Espresso 测试。有没有遇到同样问题或知道解决方法的人?
【问题讨论】:
-
我有一个问题,RecycleView 在 NestedScrollview 中。我不能使用 recycleview.scrollToPosition(X); ,它只是不起作用。在过去的 6 天里,我尝试了所有方法,但我可以克服它。有什么建议吗?非常感谢!
标签: android android-recyclerview android-espresso coordinator-layout android-nestedscrollview