[英]Show ProgressDialog while other activity is loading
之前曾有人问过这个问题,但我发现的答案对我而言没有用。
当用户在活动1中按下按钮时,活动2将打开。 活动2必须加载一些已存储在SharedPreferences中的数据。 活动2必须在onCreate()中做很多事情,因此这就是为什么花一些时间才能打开它的原因(尤其是在较慢的设备上)。 与我见过的其他情况不同,Activity不必从Internet下载数据,因此我不可以选择使用AsyncTask,因为打开Activity花费很长时间的原因不是Internet,但原因是必须加载5个列表视图,并且必须进行大量计算才能正确处理数据。
那么在活动2加载时如何在这种情况下显示ProgressDialog?
那么在活动2加载时如何在这种情况下显示ProgressDialog?
不必担心,因为即使您显示ProgressDialog
它也会冻结,因为您的Activity
会很努力地阻塞主UI线程。 如果您知道布局创建/数据构建(或您在onCreate()
方法中所做的任何事情)将花费一些时间,那么用户会注意到:
ProgressBar
以向用户指示正在完成的工作 onCreate()
ProgressBar
这样,您的活动将从工作/加载指示器开始,并在可用时进行布局。 也许您还可以改进一些东西(五个ListViews
似乎有点奇怪)。
公共类TestActivity扩展了Activity {
ProgressDialog progressDialog;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
context = this;
showProgress("Data loading...");
new Thread() {
public void run() {
try {
boolean sucess = loadData();
if (sucess) {
Message alertMessage = new Message();
alertMessage.what = 1;
handle.sendMessage(alertMessage);
} else {
Message alertMessage = new Message();
alertMessage.what = 2;
handle.sendMessage(alertMessage);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}.start();
}
private boolean loadData() {
// load data here
return true;
}
private void showProgress(String msg) {
progressDialog = ProgressDialog
.show(TestActivity.this, null, msg, true);
}
private void hideProgress() {
if (progressDialog != null)
progressDialog.dismiss();
}
Handler handle = new Handler() {
public void handleMessage(android.os.Message msg) {
hideProgress();
if (msg.what == 1) {
Toast.makeText(context, "Data Loaded Sucessfully",
Toast.LENGTH_SHORT).show();
} else if (msg.what == 2) {
Toast.makeText(context, "Data Loading failed ",
Toast.LENGTH_SHORT).show();
}
super.handleMessage(msg);
};
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.