其實,檢查源代碼,你最終也會這樣做。
Fragment.getLoaderManager:
/**
* Return the LoaderManager for this fragment, creating it if needed.
*/
public LoaderManager getLoaderManager() {
if (mLoaderManager != null) {
return mLoaderManager;
}
if (mActivity == null) {
throw new IllegalStateException("Fragment " + this + " not attached to Activity");
}
mCheckedForLoaderManager = true;
mLoaderManager = mActivity.getLoaderManager(mWho, mLoadersStarted, true);
return mLoaderManager;
}
mWho
基本片段ID。
final void setIndex(int index, Fragment parent) {
mIndex = index;
if (parent != null) {
mWho = parent.mWho + ":" + mIndex;
} else {
mWho = "android:fragment:" + mIndex;
}
}
在Activity.getLoaderManager()
不同的是,誰將會是(root)
因此,即使你可以做你的要求,直接調用它的碎片可能是一個更好的方法
免責聲明:我只檢查了最新版本的源代碼,但我不希望它是非常不同的
我看不出這種方法的問題。確保你使用每個片段的唯一ID(除非你可以重複使用同一個裝載器) –
我已經確認這個ID是唯一的。它感覺不對。因爲當加載器被創建時,片段將自己註冊爲回調函數,如果系統已經銷燬了片段,loader會重新加載數據並嘗試調用'onLoadFinished()'方法? – 500865
'onLoadFinished'將在Activity中被調用,它將不得不查找片段。它可能存在或不存在(在這種情況下,只是忽略結果)。無論如何,我現在留下了正確的答案。 –