Fragment XXX not attached to Activity


  • 直接切入主題。出現這個問題后,我們定位到代碼中的位置一般是getString或者getResources導致的!
  • 既然是Fragment出現的問題。我們直接定位到Fragment的源代碼,檢索錯誤的字符串,馬上我們可以看到Fragment的getResources()方法(getString最終也會調用這個方法),如下
   /** * Return <code>getActivity().getResources()</code>. */ final public Resources getResources() { if (mHost == null) { throw new IllegalStateException("Fragment " + this + " not attached to Activity"); } return mHost.getContext().getResources(); } 
  • 從上面的代碼中我們可以明白,拋出異常的原因是mHost == null,而這個mHost會在Fragment被回收后置為null(詳細的細節可以查看FragmentManager這個類),出現這種狀況是由於我們退出當前Fragment后某個線程還調用getString等方法
  • 所以如果Fragment被回收后我們再調用這個方法,就會拋出這個異常

解決方案:

1.錯誤已經和明顯的指出not attached to Activity了,所以我們在調用getString等方法前需要判斷一下Fragment是否已經add到Activity中(通過Fragment的isAdded方法)
2.直接在Fragment創建的時候通過getActivity獲取Activity上下文對象賦值給成員變量,后面直接用即可



作者:android_cyw
鏈接:https://www.jianshu.com/p/a8af13abe405
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM