2017-03-04 5 views
0

私はそこにアプリケーションがあります:スプラッシュ画面、主なアクティビティ(スプラッシュ画面から開始)、いくつかのフラグメントをアタッチして切り離すnavigationViewがあります。
私はAsyncTaskでいくつかの情報をダウンロードする必要があります。問題は、AsyncTaskがスプラッシュ画面(スプラッシュ画面が3秒間存続する)で呼び出され、ダウンロードに3秒以上かかることがあることです。 AsyncTaskのonPostExecute()では、フラグメントがすでにロードされている場合にのみ、ファンクションloadFeeback()(これはフラグメント・クラスにあります)をコールします。まだインスタンス化されていない可能性のあるアクティビティからフラグメントマネージャを取得

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

@コチ私は時間を最適化したいです – Francesco

答えて

0

Asynctaskはスプラッシュアクティビティを作成したため、アクティビティに関連付けられています。 たぶん、あなたは、ヘッドレスフラグメント(レイアウトなしの断片)を使用することができます。

はのonCreate機能で正確にフラグメントを作成します。あなたのスプラッシュ活動で setRetainInstance(true)

は、フラグメントを作成し、タグで彼を救う:

HeadlessFragment headlessFragment = new HeadlessFragment() 

getSupportFragmentMangager().beginTransaction().add(headlessFragment, "fragmenttag").commit(); 
メインactivyが起動されたときの断片

であなたのasynctaskを起動し、

は、フラグメントを取得した:

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

だから、フラグメントは、メインの活動に添付されます、そしてあなたは、このことができます

希望を必要とするものは何でも呼び出す必要があります。

私の貧しい私の英語のために申し訳ありません。

+0

'それはあなたの活動の破壊から生き残ることはできません.'実際には、Asynctaskはアクティビティよりも長生きする可能性があり、アクティビティ参照を保持しているとメモリリークを引き起こす可能性があります。 – Enzokie

+0

応答ありがとうございます私はあなたのコードを試してみましょう! – Francesco

+0

@Enzokieあなたは正しいです、多くのショールカットに。 – Cochi

関連する問題