binarybucks / homA

An extensible framework for the smart home
Eclipse Public License 1.0
137 stars 24 forks source link

Android PagerAdapter IllegalStateException #105

Closed binarybucks closed 11 years ago

binarybucks commented 11 years ago

Don't know where that one suddenly comes from. Haven't touched it since it worked last time so probably caused by some bug in the code ignored by previous version of the support lib which was updated with ADT v. 22

06-06 21:46:49.501: E/AndroidRuntime(8213): FATAL EXCEPTION: main 06-06 21:46:49.501: E/AndroidRuntime(8213): java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 0, found: 2 Pager id: st.alr.homA:id/pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class st.alr.homA.MainActivity$RoomPagerAdapter 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.support.v4.view.ViewPager.populate(ViewPager.java:959) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.support.v4.view.ViewPager.populate(ViewPager.java:911) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1432) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.View.measure(View.java:15518) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.View.measure(View.java:15518) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.View.measure(View.java:15518) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.View.measure(View.java:15518) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.View.measure(View.java:15518) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4825) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 06-06 21:46:49.501: E/AndroidRuntime(8213): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.View.measure(View.java:15518) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.Choreographer.doFrame(Choreographer.java:532) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.os.Handler.handleCallback(Handler.java:725) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.os.Handler.dispatchMessage(Handler.java:92) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.os.Looper.loop(Looper.java:137) 06-06 21:46:49.501: E/AndroidRuntime(8213): at android.app.ActivityThread.main(ActivityThread.java:5041) 06-06 21:46:49.501: E/AndroidRuntime(8213): at java.lang.reflect.Method.invokeNative(Native Method) 06-06 21:46:49.501: E/AndroidRuntime(8213): at java.lang.reflect.Method.invoke(Method.java:511) 06-06 21:46:49.501: E/AndroidRuntime(8213): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 06-06 21:46:49.501: E/AndroidRuntime(8213): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 06-06 21:46:49.501: E/AndroidRuntime(8213): at dalvik.system.NativeStart.main(Native Method)

binarybucks commented 11 years ago

Trying a fix where the pager item count is managed internally instead of relying on the global room count. The room count is now only read initially when instantiating a new pager. After that the internal value is incremented or decremented by the RoomAdded or RoomRemoved events.

The cause was probably that the global room count changed faster than the events triggered the RoomAdded or RoomRemoved events, so that the room count change was > 1 between two notifyDatasetChanged calls in the events.

vkarthikeyan commented 9 years ago

Me too have the same problem. And posted in stackoverflow blog. http://stackoverflow.com/questions/26354497/illegastateexception-in-horizontalscrollview-while-scrolling . Could you help on this?