首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android ViewPager ClassCastException:CirclePageIndicator 與 HorizontalScrollView 狀態衝突

     編輯:程式設計疑難解答

異常堆疊:

java.lang.ClassCastException: com.viewpagerindicator.CirclePageIndicator$SavedState cannot be cast to android.widget.HorizontalScrollView$SavedState
    at android.widget.HorizontalScrollView.onRestoreInstanceState(HorizontalScrollView.java:1667)
    ...

原因分析

  • ViewPager 內部使用 HorizontalScrollView 實現滑動。
  • CirclePageIndicator(第三方庫)也是 HorizontalScrollView 子類,並實現了自定義 SavedState。
  • Fragment 恢復狀態時,ViewPager 試圖將 CirclePageIndicator 的 SavedState 強轉為 HorizontalScrollView.SavedState,類型不匹配導致崩潰。

解決方案

  1. 升級庫版本:ViewPagerIndicator 庫較老,建議遷移至 TabLayout (Material Design) 或 ViewPager2 + 現代指示器庫。
  2. 不保存指示器狀態:在 CirclePageIndicator 子類中重寫 onSaveInstanceState 返回 null 或調用 super.onSaveInstanceState() 後移除自定義狀態。
  3. 避免嵌套:若指示器放在 Fragment 內,嘗試移至 Activity 層級,或使用 ViewPager.setOffscreenPageLimit 減少銷毀/重建。

參考鏈接

百度知道相關討論:https://zhidao.baidu.com/link?url=eihpOQRSHW7f_5I8pUK4lRVncRYacvQ2Dqw5RIYV7kbymjJL6KvKXd0-hBjKG95-QlmO_DPr4Nu58hQGthsrSqoOYSZWHvjZOt_zrk42PWy

核心提示:第三方指示器庫與 ViewPager 內部狀態恢復機制不兼容,優先考慮替換為官方組件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved