我正在使用一个简单的progressDialog,运行正常,但车轮没有进展:
//Progress Dialog
final ProgressDialog dialog = ProgressDialog.show(TravelPharm.this, "Searching","Please wait ...", true);
((ProgressDialog) dialog)
.setProgressStyle(ProgressDialog.BUTTON_NEUTRAL);
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
dialog.dismiss();
}
};
Thread checkUpdate = new Thread() {
public void run() {
handler.sendEmptyMessage(0);
}
};
checkUpdate.start();
我错过了什么?
答案 0 :(得分:1)
按如下方式创建进度对话框:
final ProgressDialog progress = new ProgressDialog(context);
添加一些文字/图标:
progress.setTitle("Loading");
progress.setMessage("Loading, please wait");
progress.setIcon(R.drawable.icon);
显示:
progress.show();
答案 1 :(得分:0)
我认为您应该将ProgressDialog.STYLE_SPINNER
传递给ProgressDialog.setProgressStyle()
方法。
答案 2 :(得分:0)
final ProgressDialog dialog = ProgressDialog.show(TravelPharm.this, "Searching","Please wait ...", true);
创建ProgressDialog的方式是正确的 - 如果微调器没有旋转,那么有些东西阻塞了你的UI线程。
出于兴趣,您为什么使用TravelPharm.this
代替this
?我不确定这是你问题的原因,我只是想知道为什么。
答案 3 :(得分:0)
我猜你是从一个对话框启动一个时间密集型的任务,然后在你试图解除对话框的处理程序中捕获线程退出。如果可能,请考虑在对话框完成后发送空消息。然后在处理程序中创建一个新的AsyncTask:
private class MyAsynch extends AsyncTask<String, Void, String>{
protected void onPreExecute() {
resetProgress();
progress.show();
}
@Override
protected String doInBackground(String...strings) { // <== DO NOT TOUCH THE UI VIEW HERE
// TODO Auto-generated method stub
doNonUIStuff();
return someString; // <== return value String result is sent to onPostExecute
}
protected void onPostExecute(String result){
progress.dismiss();
doSomethingWithString(result); // you could launch results dialog here
}
};
protected void onPause() {
super.onPause();
if (asynch != null) {asynch.cancel(true);}
if (progress != null){progress.cancel();}
}
private void resetProgress() { // avoid frozen progress dialog on soft kill
if (progress != null && progress.isShowing()){
progress.cancel();
}
progress= new ProgressDialog(this);
progress.setIndeterminate(true);
progress.setMessage("I am thinking.");
}
你可以在onPostExecute中返回任何类型,在这个例子中我返回一个字符串。另一种方法是使用startActivityForResult在onActivityResult中创建AsycnTask,将第二个Activity作为“对话框”启动。
换句话说,在对话框或第二个Activity中收集数据,然后在第一个活动中显示onPreExecute中的进度对话框,在后台执行时间密集型任务,并在onPostExecute中取消进度对话框。
我看过冻结的旋转球,因此调用了resetProgress()。