进度对话问题

时间:2011-09-19 13:15:43

标签: android

实际上我在使用进度对话框时遇到了问题。问题不在于进度对话框。我觉得很困难。

我调用了一个活动的onPause()函数

public void onPause()
{
   super.onPause();
   setData();
}

现在onBackpressed()方法我显示了一个progressdialog,我使用的代码是

public void onBackPressed() 
{           
    final ProgressDialog progressDialog = ProgressDialog.show(this, "", "Loading. Please wait...", true);
    Thread reminderThread = new Thread() 
    {
        public void run()
        {
            try
            {
                Thread.sleep(3 * 1000);
                ReminderForm.this.finish();
                progressDialog.dismiss();                           
            } 
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    };reminderThread.start();
 }

现在我的问题是,当我输入数据并在onPause()方法上调用setData()时,需要时间退出该活动。所以在此期间我会在用户单击后退按钮时显示进度条。这些工作正常,但是当用户输入没有数据时,我希望显示进度条,但是当用户输入数据并调用onPause()方法的setData()方法时显示的时间较少。但在我的情况下是否用户输入数据与否,progressBar需要3秒。所以有什么方法可以让我得到第一个线程的时间,并把时间放在我的第二个线程中。

1 个答案:

答案 0 :(得分:1)

在这种情况下,

Handler.postDelayed方法将成为你的朋友。 Handler.postDelayed不是生成新线程并执行代码来执行延迟,而是允许您设置等待的时间并传入要在UI线程上执行的Runnable。

http://developer.android.com/reference/android/os/Handler.html#postDelayed%28java.lang.Runnable,%20long%29

修改

实际上,我接受了。重新阅读后,您似乎要做的是在用户按下后退按钮时保存状态,在此期间显示对话框,然后关闭对话框并在完成后完成活动。这就是你需要的:

@Override
public void onBackPressed() {
    new SaveStateTask().execute();
}

protected void saveMyActivityState() {
    // Do your stuff for however long it takes...
    // This is executing on a background thread...
}

class SaveStateTask extends AsyncTask<Void, Void, Void>
{
    ProgressDialog progressDialog;

    @Override
    protected void onPreExecute() {
        progressDialog = ProgressDialog.show(NameOfYourActivity.this, "", "Loading. Please wait...", true);
    }

    @Override
    protected void onPostExecute(Void result) {
        progressDialog.dismiss();
        NameOfYourActivity.this.finish();
    }

    @Override
    protected Void doInBackground(Void... arg0) {

        saveMyActivityState();

        return null;
    }

}