私はAndroidアプリケーションにN個の要素を持つRecyclerViewがあり、このRecyclerViewがスクロール時に終了に達すると、さらに要素が追加されます(したがって、スクロールに到達するとデータをロードする無限リストです)ボトム)。
これをテストしたいのですが、これを行う方法が見つかりません。 scrollToPositionを持つRecyclerViewActionsを使用していますが、最後の位置を配置しても、最後に到達しません(各要素の高さが高いため)。
誰か私がこれをどうやってできるのか知っていますか?
以下を使用して、RecyclerView
の一番下までスクロールします。
_activity = mActivityTestRule.launchActivity(startingIntent);
onView(withId(R.id.recyclerView))
.perform(RecyclerViewActions.scrollToPosition(activity.recyclerView.getAdapter().getItemCount() - 1));
_
次に、さらにデータがロードされたときに、 アイドルリソース (またはThread.sleep()
)を使用してこれを再度呼び出す必要があります。
私はこれを使います。
// Get total item of myRecyclerView
RecyclerView recyclerView = mActivityTestRule.getActivity().findViewById(R.id.myRecyclerView);
int itemCount = recyclerView.getAdapter().getItemCount();
Log.d("Item count is ", String.valueOf(itemCount));
// Scroll to end of page with position
onView(withId(R.id.myRecyclerView))
.perform(RecyclerViewActions.scrollToPosition(itemCount - 1));
viewActionを実装できます。このような:
class ScrollToBottomAction : ViewAction {
override fun getDescription(): String {
return "scroll RecyclerView to bottom"
}
override fun getConstraints(): Matcher<View> {
return allOf<View>(isAssignableFrom(RecyclerView::class.Java), isDisplayed())
}
override fun perform(uiController: UiController?, view: View?) {
val recyclerView = view as RecyclerView
val itemCount = recyclerView.adapter?.itemCount
val position = itemCount?.minus(1) ?: 0
recyclerView.scrollToPosition(position)
uiController?.loopMainThreadUntilIdle()
}
}
次のように使用します。
onView(withId(R.id.recyclerView)).perform(ScrollToBottomAction())