实际上我在使用进度对话框时遇到了问题。问题不在于进度对话框。我觉得很困难。
我调用了一个活动的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秒。所以有什么方法可以让我得到第一个线程的时间,并把时间放在我的第二个线程中。
答案 0 :(得分:1)
Handler.postDelayed方法将成为你的朋友。 Handler.postDelayed不是生成新线程并执行代码来执行延迟,而是允许您设置等待的时间并传入要在UI线程上执行的Runnable。
修改强>
实际上,我接受了。重新阅读后,您似乎要做的是在用户按下后退按钮时保存状态,在此期间显示对话框,然后关闭对话框并在完成后完成活动。这就是你需要的:
@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;
}
}