問(wèn)題:
java.lang.IllegalStateException: Fragment MusicNetFragment{4840349} not attached to Activity? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? at android.support.v4.app.Fragment.getResources(Fragment.java:646)?
原因:
在Fragment的構(gòu)造方法中調(diào)用了 getResources();
getResources().getStringArray(R.array.string);
由于new Fragment構(gòu)造方法時(shí)還沒(méi)有與FragmentActivity 進(jìn)行 attached,所以父類(lèi)Fragment中找不到 (FragmentHostCallback) mHost 即為空. 所以調(diào)用getResources()時(shí)拋出了異常;
final public Resources getResources() { if(mHost==null) {
throw newIllegalStateException("Fragment "+this+" not attached to Activity");
}
returnmHost.getContext().getResources();
}
來(lái)看下源代碼: 只用當(dāng)Fragment與activity 產(chǎn)生關(guān)系時(shí)(attached)才會(huì)調(diào)用如下
FragmentActivity類(lèi) : 在成員變量中new 了一個(gè) HostCallbacks對(duì)象,(HostCallbacks繼承自FragmentHostCallback)
final FragmentController mFragments = FragmentController.createController(new HostCallbacks());?
FragmentController類(lèi):
private FragmentController(FragmentHostCallback callbacks) {
mHost= callbacks;
}
該圖片引用于: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1030/3641.html
解決方法:?
在onStart()方法中進(jìn)行g(shù)etResources()操作;