RecyclerViewActions.scrollTo не работает, если мы используем привязку данных Android в ViewHolder - PullRequest
0 голосов
/ 13 июня 2019

Я реализовал RecyclerView.Adaper, используя библиотеку привязки данных Android, как в учебник : в onCreateViewHolder Я ViewItemBinding.inflate в onBindViewHolder Я обновляю модель представления в привязках.

Когда я использую RecyclerViewActions.scrollTo:

onView(withId(R.id.recyclerView)).perform(RecyclerViewActions.scrollTo<RecyclerView.ViewHolder>(hasDescendant(withText(textId))))

Выдает PerformException

androidx.test.espresso.PerformException: Error performing 'scroll RecyclerView to: holder with view: has descendant: with string from resource id: <2131689508>[activity_home_item_title] value: The title' on view 'with id: com.xxx.yyy.debug:id/recyclerView'

1 Ответ

0 голосов
/ 13 июня 2019

Краткий ответ

В качестве быстрого обходного пути вы можете executePendingBindings в onBindViewHolder

viewDataBinding.viewModel = myViewModel
viewDataBinding.executePendingBindings()

Объяснение

Когда вы устанавливаете модель для viewBindigns под капотом Android, привязки данных вызывают ViewDataBinding.requestRebind, которая запрашивает, чтобы chareorgrapher выполнил привязки в следующем кадре. Поэтому в то время, когда Espresso сопоставляет текст, привязки еще не применяются, то есть представление еще не получило данные из модели представления.

Если вы ищете альтернативу и, скажем, более «чистый» подход, вы можете попробовать executePendingBindings в вашем ViewHolderMatcher, это должно сработать, но это требует больше усилий, а я не пробовал.

...