startActivity()期间的ProgressDialog

时间:2013-12-14 14:32:51

标签: android progressdialog start-activity

我的活动中有这个代码(LoadTask是一个内部类):

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()并让它被活动一起销毁。
  3. ProgressDialog是否可以通过加载数据和创建新活动来保持持久性,并且最终在新活动UI准备好显示时被解除?

1 个答案:

答案 0 :(得分:0)

如果您想要更顺畅的过渡,我建议您使用片段代替。或者你可以通过不填充列表视图直到onStart并确保它在后台线程上完成来使它稍微平滑。