gpt4 book ai didi

android - 使用 Robolectric 3.2.1 进行 UT 时未绘制 fragment 中的 ViewPager

转载 作者:行者123 更新时间:2023-11-30 00:25:20 25 4
gpt4 key购买 nike

我正在使用 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 与 ViewPagerTestActivity 一起运行良好

Robolectric.setupActivity(ViewPagerTestActivity.class);

但是当我运行的时候

SupportFragmentTestUtil.startFragment(new ViewPagerFragment());

我发现 ViewPager 的 onDraw() 和 onMeasure() 都没有被调用。谁能告诉我为什么或如何使 ViewPager 在 ViewPagerTestFragment 中绘制?

最佳答案

这不仅与 ViewPager 有关,而且与 RecyclerView 和其他 subview 有关。

你必须像这样在屏幕上模拟显示:

view.measure(SIZE, SIZE);
view.layout(0, 0, SIZE, SIZE);

对于 ViewPager 项,您必须在测试中模拟它,例如:

fragment.adapter.instantiateItem(findViewPager(), 0)
Robolectric.flushForegroundThreadScheduler()

关于android - 使用 Robolectric 3.2.1 进行 UT 时未绘制 fragment 中的 ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45477897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com