如何在活动之间的长时间转换期间安装旋转进度条(或对话框)?我已经看到帮助实现AsyncTask的解决方案 - 我在帖子中提到的链接将How to display progress dialog before starting an activity in Android?,但问题是进度条没有旋转。
package expir.java.file;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.Button;
public class ExpirActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
Button mapButton = (Button)findViewById(R.id.first_button);
mapActivityIntent = new Intent(this, MyMapActivity.class);
pDialog = new ProgressDialog(this);
mapButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
pDialog.setMessage("Loading...");
new MyTask(pDialog).execute();
}
});
Button downloadButton = (Button)findViewById(R.id.second_button);
downloadButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
as.DownloadFromUrl("0", "null");;
}
});
Button parseButton = (Button)findViewById(R.id.third_button);
parseButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SAXParserCreateDataBase gi = new SAXParserCreateDataBase();
try {
gi.start(ExpirActivity.this);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
Button updateButton = (Button)findViewById(R.id.fourth_button);
updateButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
SAXParserCreateDataBase gi = new SAXParserCreateDataBase();
try {
gi.update(ExpirActivity.this);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
public class MyTask extends AsyncTask<Void, Void, Void> {
public MyTask(ProgressDialog progress) {
this.progress = progress;
}
public void onPreExecute() {
progress.show();
}
public Void doInBackground(Void... unused) {
startActivity(mapActivityIntent);
return null;
}
public void onPostExecute(Void unused) {
progress.dismiss();
}
ProgressDialog progress;
}
DownloadPrimaryDate as = new DownloadPrimaryDate();
Intent mapActivityIntent;
ProgressDialog pDialog;
}
更新
LogCat结果:
FirstActivity.onCreate()
FirstActivity.onStart()
FirstActivity.onResume()
FirstActivity.onPause()
SecondActivity.onCreate()
SecondActivity.onStart()
SecondActivity.onResume()
FirstActivity.onStop()
这解释了为什么会这样。
UPDATE
在我意识到我在想什么 - 并非我在活动之间实现这种转变的所有尝试都是均匀的。
答案 0 :(得分:0)
我看到了两个解决方案,具体取决于任务所需的时间。
如果第一个活动执行了长任务,则在按下按钮时创建一个进度对话框,将onShowListener
设置为他的对话框,在onShow回调中启动您的异步任务。任务完成后,关闭进度对话框并开始下一个活动。
如果下一个活动执行了长任务,只需在活动onCreate
中设置简单布局并创建一个进度对话框,设置onShowListener并在onShow中启动AsyncTtask
以及何时完成加载其余的ui并关闭对话框。