Android Espresso: ViewPager does not have an adapter instance

I use in my Android (4.0+) application fragment (in Activity) with a tab bar.

I want to create an Espresso test, but if I create the main activity and open the snippet. I get this exception:

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) 

My code in the snippet:

 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mViewPagerAdapter = new StaticContentPagerAdapter( this.getChildFragmentManager(), mItemsList, categories); mPager.setAdapter(mViewPagerAdapter); mTabs.setViewPager(mPager); //line 197 

Do you have a clue where there might be a problem? What's wrong?

+7
android android-fragments android-testing android-espresso
source share
1 answer

I also ran into a problem with ViewPager in fragment. This problem occurs because my viewpager has several root elements.

 @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)); } }; } } 

and this is my homefragment.xml file

 <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> 

I hope this can help you create a test case in Expresso Framework.

+1
source share

All Articles