我正在使用Robolectic 3.2.1做UT。 我创建了一个Activity和一个Fragment,它们只包含一个ViewPager,如下所示:
public class ViewPagerTestActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_test);
}
}
public class ViewPagerTestFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.viewpager_test, container, false);
return view;
}
}
和布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
当我运行
时,ViewPager可以很好地运行ViewPagerTestActivityRobolectric.setupActivity(ViewPagerTestActivity.class);
但是当我跑步时
SupportFragmentTestUtil.startFragment(new ViewPagerFragment());
我发现ViewPager的onDraw()和onMeasure()都没有被调用。 任何人都可以告诉我为什么或要做什么来使ViewPager在ViewPagerTestFragment中绘制?
答案 0 :(得分:1)
这不仅仅是关于ViewPager
,还包括RecyclerView
和其他子视图。
你必须在屏幕上模拟显示:
view.measure(SIZE, SIZE);
view.layout(0, 0, SIZE, SIZE);
对于ViewPager
项,您必须在测试中模拟它:
fragment.adapter.instantiateItem(findViewPager(), 0)
Robolectric.flushForegroundThreadScheduler()