2013-12-14 31 views
1

我在我的活動有這樣的代碼中(LoadTask是一個內部類):ProgressDialog startActivity()

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    ProgressDialog loading = new ProgressDiaolg(this); 
    ... 
    } 


public class LoadTask extends AsyncTask<Context, Void, Integer> { 
    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); 

    @Override 
    protected void onPreExecute() { 
     loading.show(); 
    } 

    @Override 
    protected Integer doInBackground(Context... params) { 
     EventLoader el = new EventLoader(params[0]); 
     list = el.getMylist(); 
     return el.getError(); 
    } 
    protected void onPostExecute(Integer result) { 

     if (result == EventLoader.NO_HTTP_CONN) { 
      getErrorDialog(R.string.errore_caricamento, true).show(); 
     } else if (result == EventLoader.ERR_JSON) { 
      getErrorDialog(R.string.errore_json, true).show(); 
     } else if (result == EventLoader.ERR_NULL) { 
      getErrorDialog(R.string.errore_evento_null, true).show(); 
     } else { 
      mainList=list; 
      Intent intent = new Intent(MainActivity.this, EventActivity.class); 
      intent.putExtra(Const.Tags.FULL_LIST, mainList); 

      loading.dismiss(); 
      startActivity(intent); 
     } 
    } 
} 

對話列表的加載過程中正常工作,但這裏是我的問題:

  1. 解除startActivity(intent)之前的對話框會導致在創建新活動(有一個列表視圖需要使用自定義適配器填充)和實際恢復之前2-3秒沒有進度指示器,這對用戶不太友好。
  2. 解除startActivity(intent)之後的對話框會導致粗略處理對話框(先變暗背景,然後凍結...等等)。實際上它就像根本不打電話loading.dismiss(),並讓它與活動一起銷燬。

ProgressDialog是否可以通過加載數據和創建新活動來持久化,並且在新活動UI準備好顯示時最終被解散?

回答

0

如果你想要一個更平滑的過渡,我會建議你使用片段代替。或者,您可以通過在onStart之前不填充列表視圖,並確保它在後臺線程上完成,使其稍微平滑一些。