安卓Espresso:ViewPager没有适配器实例

7

我在我的Android(4.0+)应用程序中使用带有选项卡栏的片段(在Activity中)。

我想创建Espresso测试,但是如果我创建主Activity并打开片段,则会出现以下异常:

java.lang.IllegalStateException: ViewPager does not have adapter instance.
at com.astuetz.PagerSlidingTabStrip.setViewPager(PagerSlidingTabStrip.java:177)
at cz.villamemories.detoxme.staticcontent.StaticContentFragment.onCreateView(StaticContentFragment.java:197)

我的代码片段:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

        mViewPagerAdapter = new StaticContentPagerAdapter(
                this.getChildFragmentManager(), mItemsList, categories);

        mPager.setAdapter(mViewPagerAdapter);

        mTabs.setViewPager(mPager); //line 197

您有什么线索可以指出问题所在吗?出了什么问题?


你解决过这个问题吗? - athor
没有...你有什么建议吗? - Pepa Zapletal
很遗憾,我也有同样的问题 :( - athor
也许您可以在这个问题后面加上一个“+”,这样就会有人来回答了。 - Pepa Zapletal
1
我最终从PagerSlidingTabStrip切换到了设计库中的新TabLayout,问题得到了解决。 - athor
在第二个代码框中,您指出了“第197行”。不幸的是,堆栈跟踪说它应该在onCreateView()而不是onActivityCreated()内部,这意味着您正在查看错误的位置。您应该发布新的、正确的日志/代码片段。 - Gil Vegliach
1个回答

0

我也遇到了在Fragment中使用ViewPager的问题。这个问题是由于我的ViewPager有多个根元素导致的。

@RunWith(JUnit4.class)
public class FragmentTest {

private static final String TAG = "FragmentTest";

@Rule
public ActivityTestRule<MainActivity> mActivity = new ActivityTestRule<MainActivity>(MainActivity.class);

@Test
public void checkTabSwiping() {
    onView(nthChildOf(withId(R.id.main_content), 5)).check(matches(withId(R.id.homecontentgrouppager)));
}

public static Matcher<View> firstChildOf(final Matcher<View> parentMatcher) {
    return new TypeSafeMatcher<View>() {
        @Override
        public void describeTo(Description description) {
            description.appendText("with first child view of type parentMatcher");
        }

        @Override
        public boolean matchesSafely(View view) {

            if (!(view.getParent() instanceof ViewGroup)) {
                return parentMatcher.matches(view.getParent());
            }
            ViewGroup group = (ViewGroup) view.getParent();
            return parentMatcher.matches(view.getParent()) && group.getChildAt(0).equals(view);

        }
    };
}
public static Matcher<View> nthChildOf(final Matcher<View> parentMatcher,
                                       final int childPosition){
    return new TypeSafeMatcher<View>() {
        @Override
        public void describeTo(Description description) {
            description.appendText("with " + childPosition + " child view of type parentMatcher");
        }

        @Override
        public boolean matchesSafely(View view) {
            if (!(view.getParent() instanceof ViewGroup)) {
                return parentMatcher.matches(view.getParent());
            }

            ViewGroup group = (ViewGroup) view.getParent();
            return parentMatcher.matches(view.getParent()) && view.equals(group.getChildAt(childPosition));
        }
    };
}
}

这是我的homefragment.xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:background="@color/black"
android:orientation="vertical">

<android.support.v4.view.ViewPager
    android:id="@+id/promotionalviewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></android.support.v4.view.ViewPager>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="@dimen/size_5"
    android:gravity="center_horizontal">

    <LinearLayout
        android:id="@+id/viewPagerCountDots"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:gravity="center_horizontal"
        android:orientation="horizontal" />

</RelativeLayout>

希望这可以帮助您在Expresso框架中创建一个测试用例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接