2016-09-03 13 views
6

エスプレッソを使用してrecyclerviewの最後までスクロールする方法はありますか?エスプレッソ:Recyclerview最後までスクロール

「Text XYZ」というテキストがあり、recyclerviewのIDがrecycler_viewであるアイテムがあります。このアイテムは、リサイクラビューの最後のアイテムです。

私は

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

を試してみました。しかし、これは動作するようには思えません。何か案は?

+0

が動作していないようです - エラーログ – piotrek1543

+0

をスクロールする前に表示されていることを確認してください。 – denys

+0

@denys ckeckは実際のrecyclerview用です。 recyclerviewが実際には表示されない限り、違いはありません。 –

答えて

13

RecyclerViewActions.scrollTo()onCreateViewHolder()のアダプターでは、ViewHolderItemViewと一致している。 scrollTo()が機能するようにするには、ItemViewを一意に識別するマッチャーを指定する必要があります。

あなたの現在のマッチャーは、エスプレッソにTextViewとしてitemViewというように膨張されたViewHolderにスクロールするよう指示します。どちらが起こる可能性がありますが、通常は、ビューホルダーを見た目にスタイルを設定するために、いくつかのViewGroupアクションが実行されています。

scrollTo() Matcherを変更した場合は、ネストされたすべてのレイアウト(複数ある場合)を考慮してhasDescendant(withText("Text XYZ"))になります。それはこの場合には、ID R.id.recycler_viewRecyclerViewである、現在のViewInteractionにクリックをお送りしますので、あなたは同じperform()でそれを行うことはできません - あなたはまた、項目をクリックしようとしているので、

も留意してください。同じ演奏でこれを行うと、スクロールしたアイテムではなく、RecyclerViewの中央をクリックするだけです。

これを解決するには、アイテムにスクロールしたり、RecyclerView.actionOnItem()を使用していたマッチャで別のonView()が必要です。別のonView()文の場合は

それらはすべて、この特定の子孫を持っているとして、それはそれのTextView(viewholder、recyclerview、その上recyclerviewを保持しているとのViewGroup)のすべての親を見つけるため、hasDescendant(withText("Text XYZ"))は、あなたが失敗します。これにより、より正確な入れ子になり、すべてのネストされたレイアウトを考慮する必要があります(ItemView)。このような状況では、私の通常のマッチャーはwithChild()ですが、あなたとは異なる場合があります。

+0

恐ろしい、ありがとう、完璧に動作します!このonView(withId(R.id.rvSettings))のようなものでなければなりません。check(matches(isDisplayed()))perform(RecyclerViewActions.scrollTo(hasDescendant(withText(stringId)))); –

関連する問題