Android Robolectric点击RecyclerView项目

Eli*_*zer 19 android robolectric android-recyclerview

有没有办法RecyclerView用Robolectric 模拟项目上的点击?

到目前为止,我已经尝试View了第一个可见的位置RecyclerView,但这始终是null.它getChildCount()不断回归0,而且findViewHolderForPosition永远都是null.适配器返回一个非0数字getItemCount()(适配器中肯定有项目).

我正在使用Robolectric 2.4 SNAPSHOT.

Eli*_*zer 40

似乎问题是RecyclerView需要在Robolectric中手动测量和布局.调用此方法可以解决问题:

recyclerView.measure(0, 0);
recyclerView.layout(0, 0, 100, 10000);
Run Code Online (Sandbox Code Playgroud)

  • 此外,这个代码应该被调用多次,就像你在适配器上调用`notifyDatasetChanged()`或类似方法一样,而不仅仅是一次.它发生在我身上. (3认同)

Mar*_*wig 7

使用Robolectric 3,您可以使用visible():

ActivityController<MyActivity> activityController = Robolectric.buildActivity(MyActivityclass);
activityController.create().start().visible();

ShadowActivity myActivityShadow = shadowOf(activityController.get()); 

RecyclerView currentRecyclerView = ((RecyclerView) myActivityShadow.findViewById(R.id.myrecyclerid));
    currentRecyclerView.getChildAt(0).performClick();
Run Code Online (Sandbox Code Playgroud)

这消除了手动触发视图测量的需要.