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    }

猜你喜欢

转载自blog.csdn.net/manjianchao/article/details/78814220