我有一個Fragment
,做與互聯網低谷一些輔助Class
,需要一個接口來處理異步回調一些像這樣的通信:片段異步接口回調處理
SomeInternetCommunicator.getResource(theResourceToGet, retrieverInterfaceInstance);
界面看起來是這樣的:
public interface SomeInternetCommunicator {
void onResourceRetrieveSuccess(SomeResource resource);
void onResourceRetrieveFailed(CommunicatorException e);
}
問題是,有時候通話時間過長,用戶已經在其他地方導航,撥打getResource
的Fragment
不是當前通話的一部分y再次運行Activity
(不顯示,不在背後)。這會導致很多問題,因爲這個孤兒Fragment
仍然試圖對回調作出反應,即使它不再是Activity
的一部分。例如,getContext()
返回null。
現在我在Fragment
解決方法是這樣的:
SomeInternetCommunicator flocktrackerTrackerRetrieverInterface = new SomeInternetCommunicator() {
@Override
public void onResourceRetrieveSuccess(SomeResource resource) {
if(isVisible()){
doRetrievalPostProcessing(resource);
}
}
@Override
void onResourceRetrieveFailed(CommunicatorException e) {
if(isVisible()){
doExceptionHandling();
}
}
};
使用isVisible()
作品,因爲這將確保該片段是仍然在前臺,Activity
的一部分,並準備做處理。然而,這並不能幫助我解決Fragment
不可見的情況,但仍然是當前的Activity
的一部分,這限制了我在顯示Fragment
之前加載Fragment
的可能性。 (Activity
在後臺,Fragment
位於Backstack
,Fragment
位,由ViewPager
加載)。
在我進行後處理之前,有沒有更好的方法來確保Fragment
仍然在當前的Activity
的範圍之內?也許檢查isAdded()
?
This question似乎解釋了一個更廣泛但相關的情況,但它沒有答案。
謝謝!
是isAdded()是正確的。如果您想在添加和刪除時執行更多操作,請覆蓋onAttach()和onDetach()。 – anhtuannd