天天看點

關于在項目中多個類繼承FragmentPagerAdapter時,改變getCount(),FC的問題解決

    在貿易通項目,報以下FC

08-21 09:56:21.515: E/AndroidRuntime(1629): java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 2, found: 50000 Pager id: com.example.dianzikouanv1:id/pager_banner Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.example.dianzikouanv1.fragment.HomeFragment$BannerPagerAdapter

08-21 09:56:21.515: E/AndroidRuntime(1629): at android.support.v4.view.ViewPager.populate(ViewPager.java:966)

     說是沒有notifyDataSetChanged,但是對比原來項目該notifyDataSetChanged都寫了。在報錯fragment打log

     發現每次getCount改變就挂

08-21 09:56:21.200: E/HomeFragment(1629): BannerPagerAdapter_getCount()_offLine

08-21 09:56:21.201: E/HomeFragment(1629): BannerPagerAdapter_getCount()_offLine

08-21 09:56:21.233: E/HomeFragment(1629): BannerPagerAdapter_getCount()_offLine

08-21 09:56:21.420: E/HomeFragment(1629): onPageScrolled--1_0.0_0

08-21 09:56:21.500: E/HomeFragment(1629): initBannerMessage()

08-21 09:56:21.505: E/HomeFragment(1629): BannerPagerAdapter_getCount()_onLine

08-21 09:56:21.515: E/AndroidRuntime(1629): FATAL EXCEPTION: main

    上網找資料,發現一段:

這不是PagerAdapter中的Bug,通常情況下,調用notifyDataSetChanged方法會讓ViewPager通 過Adapter的getItemPosition方法查詢一遍所有child view,這種情況下,所有child view位置均為POSITION_NONE,表示所有的child view都不存在,ViewPager會調用destroyItem方法銷毀,并且重新生成,加大系統開銷,并在一些複雜情況下導緻邏輯問題。特别是對于 隻是希望更新child view内容的時候,造成了完全不必要的開銷。

繼續閱讀