I am getting an IllegalStateException within this activity but not too sure what is going on. Here is the ViewPagerAdapter class in QuickContactActivity.
private class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
QuickContactListFragment fragment = new QuickContactListFragment();
final String mimeType = mSortedActionMimeTypes.get(position);
final List<Action> actions = mActions.get(mimeType);
fragment.setActions(actions);
return fragment;
}
@Override
public int getCount() {
return mSortedActionMimeTypes.size();
}
}
Here is the crash log:
07-15 09:49:21.060: E/com.##.##.##.Application(12378): Thread uncaught exception:
07-15 09:49:21.060: E/com.##.##.##.Application(12378): java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 0, found: 1 Pager id: com.##.##.android:id/item_list_pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.##.contacts.quickcontact.QuickContactActivity$ViewPagerAdapter
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.support.v4.view.ViewPager.populate(ViewPager.java:959)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.support.v4.view.ViewPager.populate(ViewPager.java:911)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.View.measure(View.java:15518)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.Choreographer.doFrame(Choreographer.java:532)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.os.Handler.handleCallback(Handler.java:725)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.os.Handler.dispatchMessage(Handler.java:92)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.os.Looper.loop(Looper.java:137)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at android.app.ActivityThread.main(ActivityThread.java:5041)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at java.lang.reflect.Method.invokeNative(Native Method)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at java.lang.reflect.Method.invoke(Method.java:511)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-15 09:49:21.060: E/com.##.##.##.Application(12378): at dalvik.system.NativeStart.main(Native Method)
07-15 09:49:21.060: E/ACRA(12378): ACRA caught a IllegalStateException exception for com.##.##.android. Building report.
The problem is that your list of items/pages to show in the PageAdapter change and you dont call
pageAdapter.notifyDataSetChanged()
.If you continue read the message, says that wait for 0 items and get 1. With this, it's seems that you set the adapter before set all the items/pages that the adapter receive.
I have similar problems like you did, i have viewpager on Activity A then when user clicked the item in the viewpager, it will go to Activity B that have viewpager too. After user back from Activity B to Activity A, it will throwing Exception like this:
I think the problem is, the data content that the adapter of the viewpager have always 0 because the adapter not have the data that passed through from Activity. So i tried it work like this example:
DetailProductActivity.class
And the adapter of viewpager: DetailProductPagerAdapter.class
And the fragment class: ProductDetailFragment.class
Now, the Exception before it will not showing anymore, and the viewpager works normally. This method trying make the viewpager like listview did, because listview will have passing the data through the adapter so the adapter will not lose the data content even the data have changed. I hope this example will help your problems. Cheers.
It happened to me when I tried to override getCount() of page adapter
During authorization, I show only one page. After end of authorization I change page count to 3. It falls for me if I do not call InvalidatePageAdapter() once