我想在android中创建一个进度对话框,让它打开2秒然后关闭它。
以下是我写的代码:
package com.example.proressdialogtest;
import android.app.activity;
import android.app.ProgressDialog;
import android.os.bundle;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ProgressDialog pg = new ProgressDialog(MainActivity.this, 4);
pg.show(MainActivity.this, null, "Searching...", false);
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
pg.dismiss();
}
当我在设备上运行代码时,会打开ProgressDialog,然后它会保持打开状态,2秒后它不会关闭。我做错了什么?
根据以下答案。我分别在doInBackground方法之前和之后添加了onPreExecute()和onPostExecute()方法。
以下是两种方法的代码。
ProgressDialog pd;
public void onPreExceute() {
pd = new ProgressDialog(MainActivity.this);
pd.show(MainActivity.this, "", "Searching...", false);
}
public void onPostExecute() {
pd.dismiss();
}
问题仍然存在。进度条不会关闭。
答案 0 :(得分:3)
您正在sleep()
上致电UI Thread
。不要这样做。使用runOnUiThread
或AsyncTask
我会使用AsyncTask
。您将在ProgressDialog
中启动onPreExecute()
,然后在onPostExecute()
中将其关闭。它是UI
元素,因此在doInBackground()
中使用它会给您带来错误
答案 1 :(得分:1)
修改强>
使用此代码
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final ProgressDialog pg ;
pg = ProgressDialog.show(MainActivity.this, null, "Searching...", false);
Thread timer=new Thread(){
public void run()
{
try {
sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
finally{
pg.dismiss();
}
}
};
timer.start();
}
}
您正在通过调用
暂停UI线程 Thread.sleep(2000);
因为Thread.sleep(x)会使当前线程休眠x毫秒
这是件坏事。
地点
我不知道为什么
pg.dismiss()在finally块中,以确保关闭进度对话框。
而且你的代码也不会运行,因为你错过了
super.onCreate(savedInstanceState);
答案 2 :(得分:0)
以下代码适合您,
new AsyncTask<Integer, Integer, Boolean>()
{
ProgressDialog progressDialog = null;
@Override
protected void onPreExecute()
{
progressDialog = ProgressDialog.show(MainActivity.this, "",
"Loading...");
}
@Override
protected Boolean doInBackground(Integer... params)
{
if (params == null)
{
return false;
}
try
{
Thread.sleep(2000);
}
catch (Exception e)
{
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result)
{
progressDialog.dismiss();
}
}.execute();