2017-03-04 69 views
0

我有一個應用程序,其中包含:啓動屏幕,主活動(從啓動屏幕啓動),其中有一個導航視圖,用於附加和分離某個片段。
在一個片段中,我需要用AsyncTask下載一些信息。問題在於AsyncTask在啓動畫面中被調用(啓動畫面會持續3秒),下載可能需要多於或少於3秒。在AsyncTask的我想調用一個函數loadFeeback()(即在片段類),只有當片段已經加載,如果沒有我設置一個靜態變量下載爲true。從可能尚未實例化的活動中獲取片段管理器

public void onPostExecute(Feedback[] feedbacks){ 
    Dati.feedbacks = feedbacks; 

    if(mainActivity != null) { 
     FragmentManager fragmentManager = mainActivity.getSupportFragmentManager(); 

     FeedbackFragment feedbackFragment = ((FeedbackFragment) (fragmentManager.findFragmentById(R.id.nav_feedback))); 
     Dati.feedbackDownloaded = true; 

     if (feedbackFragment != null) 
      feedbackFragment.loadFeeback(); 
    } 
} 

的問題是,我不能讓在MainActivity參考,我不能上下文傳遞到的AsyncTask因爲它是從閃屏調用。

任何人都可以幫助我嗎?

+0

爲什麼不在主要活動中調用AsyncTask? – Cochi

+0

@Cochi我想優化時間 – Francesco

回答

0

Asynctask與飛濺活動相關聯,因爲它創建了它。 也許你可以使用一個無頭的片段(片段沒有佈局):

在OnCreate函數創建於精確的片段: setRetainInstance(true)

在你濺活動創建片段和救他與標籤:

HeadlessFragment headlessFragment = new HeadlessFragment() 

getSupportFragmentMangager().beginTransaction().add(headlessFragment, "fragmenttag").commit(); 

啓動您的AsyncTask的片段

當你的主activy啓動檢索到的片段:

HeadlessFragment headlessFragment = getSupportFragmentMangager().findFragmentByTag("fragmenttag"); 

因此片段將被連接到主活動,你應該叫你需要什麼

希望這有助於。

對不起,我英文很差。

+0

'所以它不會在你的活動被破壞的情況下倖存下來。「事實上,Asynctask可以活躍活動,如果持有活動參考,它可能會導致內存泄漏。 – Enzokie

+0

謝謝你的迴應,我會嘗試你的代碼! – Francesco

+0

@Enzokie你是對的,很舒服。 – Cochi