2014-05-12 81 views
0

既然這樣,我的應用程序/目前正在處理一個HTTP POST和一個異步任務一些其他的東西,然後在任務完成和onPostExecute叫我會嘗試重定向通過片段事務處理另一個片段。這已被證明相當棘手,我期待替代處理這種情況,而不企圖犯onPostExecute交易。謝謝!與結果處理一個異步任務

編輯:這裏是從onPostExecute被調用的方法...

private void callback(boolean submissionSuccessful) 
{ 
    if (submissionSuccessful) 
    { 
     FragmentManager fragmentManager = getActivity() 
       .getSupportFragmentManager(); 

     Fragment f = new CompletedFragment(); 

     Bundle args = new Bundle(); 

     args.putString("id", reportToSubmit.getReferenceId()); 

     f.setArguments(args); 

     fragmentManager.beginTransaction() 
       .replace(R.id.content_frame, f, "completed").commit(); 


    } 
    else 
    { 
     Toast.makeText(getActivity(), getResources().getString(R.string.report_error), 
       Toast.LENGTH_LONG).show(); 
    } 
} 

這樣做的原因如下:用戶完成嚮導(ViewPager),提交,示出了進度對話框而處理,當完成onPostExecute提交確認片段,讓用戶知道該過程已完成。

+0

請出示:1.你是如何處理的東西,現在,正好2 Whay已經證明棘手? – nhaarman

+0

我編輯我原來的職位,現在,以反映這一信息。 – DeveryDay

回答

0

的邏輯看起來很不錯。我不確定你想改變什麼。

兩件事:

  • 你可能想告訴你Activity做過渡(移動回調方法)。這將這個片段與第二個片斷分開,這被認爲是「良好實踐」。
  • 其次,在onPostExecute,你Fragment可能無法連接到Activity了,而且getActivity()將返回null。你可以在取消AsyncTask,或onPostExecute檢查isAdded
+0

奇怪的是,使用這段代碼,有時當我的Async方法完成時,它會移動完成的片段,然後我看到它,但有時會跳過已完成片段的視圖。那現在是我的主要問題,並且擔心commit()會拋出一個非法狀態異常,如果偶然在調用onsaveInstance()之後調用它。 – DeveryDay