我使用以下代码显示动态进度对话框:
public void loading()
{
final int WelcomeScreenDisplay=1000;
progressDialog = new ProgressDialog(this);
progressDialog.setCancelable(true);
progressDialog.setMessage("Loading...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.incrementProgressBy(10);
progressDialog.show();
Thread WelcomeThread=new Thread()
{
int wait=0;
public void run()
{
try
{
super.run();
while(wait<WelcomeScreenDisplay)
{
sleep(100);
// progressDialog.setProgress(0);
progressDialog.incrementProgressBy(10);
wait+=100;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
};
WelcomeThread.start();
}
但有一些问题: 1)单击按钮调用此功能时,10-15秒后显示加载条 2)当用户输入用户名和密码并点击登录按钮时,当活动从登录页面跳转到另一个页面时,正在显示进度条并使用意图,然后在加载第二页的动态内容时,两者之间显示空白屏幕页面1-2分钟
我想知道我将实施哪些更改,以便不会出现此空白屏幕...并且当加载完成时,我的应用程序会从1页跳转到另一页。
答案 0 :(得分:2)
每当执行此类操作时,请使用AsyncTask。这是一个样本
class eval extends AsyncTask<Void,Void,Void>
{
ProgressDialog d;
@Override
protected void onPreExecute()
{
super.onPreExecute();
d=ProgressDialog.show(MainScreen.this,"Please Wait","Populating content...",true);
}
@Override
protected void doInBackground(Void... params)
{
//perform the required operation of fetching contents
return null;
}
@Override
protected void onPostExecute(Void result)
{
super.onPostExecute(result);
d.dismiss();
// now call the required Activity
}
}
现在在您的程序中调用此任务需要执行此操作
new eval().execute();
确保在此语句后的主UI线程中没有任何操作
答案 1 :(得分:0)
根据我的说法,AsyncTask将是执行此类任务的最佳方式,因为在这种情况下,UI将可以自由执行其他任务,否则UI将在任务期间挂起,并且不用担心线程管理。 你可以尝试:
http://android-solution-sample.blogspot.com/2011/11/android-asynctask-example.html
http://developer.android.com/reference/android/os/AsyncTask.html
答案 2 :(得分:0)
您必须在doInBackground()方法中获取数据。发生这种情况时......将显示进度对话框。您在onPostExecute()中调用另一个活动。是的,执行顺序是onPreExecute(),然后是doInBackground(),最后是OnPostExecute()。请记住,doInBackground()方法在非UI线程中执行。所以你不能在这里使用toasts或alertDialogues。