android - IllegalStateException because notifyDataSetChanged() on PagerAdapter not called -
i have following situation , couldn't find solution far: in activity there viewpager fragmentstatepageradapter. activity call activity b. there can change global data, affects number of pages in viewpager in activity a. use button, return activity a, following exception:
e/androidruntime(1756): java.lang.illegalstateexception: application's pageradapter changed adapter's contents without calling pageradapter#notifydatasetchanged! expected adapter item count: 121, found: 151 pager id: com.example.blablabla:id/main_view_pager pager class: class android.support.v4.view.viewpager problematic adapter: class com.example.blablabla.activitymain$mainviewpageradapter e/androidruntime(1756): @ android.support.v4.view.viewpager.populate(viewpager.java:962) e/androidruntime(1756): @ android.support.v4.view.viewpager.populate(viewpager.java:914) ...
i tried calling notifydatasetchanged(); on adapter @ different places (oncreate, onrestart, onresume, onactivityresult) nothing worked.
another thing tried setting adapter null everytime activity paused , recreating it, when activity resumed. avoids crash, 1. doesn't feel right , 2. pages disappear shortly before new activity becomes visible, not good.
so, how handle situation correctly?
according error message seem set adapter before set elements received adapter. ([...]expected adapter item count: 121, found: 151[...]
)
so should call pageadapter.notifydatasetchanged();
in activity b after changing data set (because should call method whenever change happens). passing through activities might troublesome.
a solution following explained by alvarolb. alvarob used settag()
method in instantiateitem()
creating new view , findviewwithtag()
can retrieve it. may want take grimmace code sample builds upon alvarolbs solution.
another solution from rui.araujo removing views , recreate them sounds pretty have done.
Comments
Post a Comment