开放活动的进度对话框

Pac*_*nka 7 android progressdialog

嘿伙计们,我在打开一个活动的进度对话框上遇到了问题(在例子中称为活动2).活动2有很多代码要在此OnCreate事件中执行.

final ProgressDialog myProgressDialog = ProgressDialog.show(MyApp.this,getString(R.string.lstAppWait), getString(R.string.lstAppLoading), true);
new Thread() {
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                showApps();
            }
        });
        myProgressDialog.dismiss();
    }
}.start(); 
Run Code Online (Sandbox Code Playgroud)

showApps函数启动活动2.

如果我在活动1上的按钮点击事件上执行此代码,我会看到进度,但是她没有移动并且在2或3秒内有一个黑屏,以便android显示活动.

如果我在Activity2的OnCreate中执行此代码并且如果我用OnCreate上的代码替换showApps,则Activity1冻结2秒,我没有看到进度对话框,并且在看到结果之前再次冻结活动2上的2秒.

一个主意 ?

Dar*_*cks 10

我有同样的问题,并使用AsyncTask为我工作.

在AsyncTask中有三种重要的方法可以覆盖.

  1. doInBackground:这是您进行后台处理的主要内容.
  2. onPreExecute:在这里显示你的ProgressDialog(showDialog)
  3. onPostExecute:在这里隐藏你的ProgressDialog(removeDialog或dismissDialog)

如果将AsyncTask子类作为活动的内部类,则可以在AsyncActivity中调用框架方法showDialog,dismissDialog和removeDialog.

这是AsyncTask的示例实现:

class LoginProgressTask extends AsyncTask<String, Integer, Boolean> {
  @Override
  protected Boolean doInBackground(String... params) {
    try {
      Thread.sleep(4000);  // Do your real work here
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return Boolean.TRUE;   // Return your real result here
  }
  @Override
  protected void onPreExecute() {
    showDialog(AUTHORIZING_DIALOG);
  }
  @Override
  protected void onPostExecute(Boolean result) {
    // result is the value returned from doInBackground
    removeDialog(AUTHORIZING_DIALOG);
    Intent i = new Intent(HelloAndroid.this, LandingActivity.class);
    startActivity(i);
  }
}
Run Code Online (Sandbox Code Playgroud)