Fragment XXXXXX{xxxxxxxxx} not attached to Activity

Monkey跑出如下異常。導致Settings Crash

 E AndroidRuntime:  at android.app.Fragment.getResources(Fragment.java:814)
 E AndroidRuntime:  at android.app.Fragment.getText(Fragment.java:826)
 E AndroidRuntime:  at com.android.settings.wifi.WifiSettings.setOffMessage(WifiSettings.java:767)
 E AndroidRuntime:  at com.android.settings.wifi.WifiSettings.onWifiStateChanged(WifiSettings.java:825)
 E AndroidRuntime:  at com.android.settingslib.wifi.WifiTracker$MainHandler.handleMessage(WifiTracker.java:581)

這個異常是這裏拋出來的:

frameworks/base/core/java/android/app/Fragment.java
809    /**
810     * Return <code>getActivity().getResources()</code>.
811     */
812    final public Resources getResources() {
813        if (mHost == null) {
814            throw new IllegalStateException("Fragment " + this + " not attached to Activity");
815        }
816        return mHost.getContext().getResources();
817    }
818

那麼就說明mHost爲null。mHost爲什麼是Null呢,什麼情況下不是Null呢?

432    // Activity this fragment is attached to.
433    FragmentHostCallback mHost;

這裏的說明意思是Fragment需要Attach的Activity,如果mHost爲空,那麼就是Fragment還沒attach到Activity唄。

避免如下問題可以通過先判斷mHost是否,當然系統已經給你寫好了,你直接調用就ok了。

894    /**
895     * Return true if the fragment is currently added to its activity.
896     */
897    final public boolean isAdded() {
898        return mHost != null && mAdded;
899    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章