我有一个ListActivity类,当点击列表中的任何项目时,会显示一个新活动。新活动需要时间加载,所以我希望用户知道发生了某些事情(以进度对话框的形式)
所以,为了做到这一点,我在我的类中实现了Runnable -
public class ProtocolListActivity extends ListActivity implements Runnable {
private ProgressDialog progDialog;
....
protected void onListItemClick(ListView l, View v, int position, long id) {
progDialog.show(this, "Showing Data..", "please wait", true, false);
Thread thread = new Thread(this);
thread.start();
}
....
public void run() {
// some code to start new activity based on which item the user has clicked.
}
最初,当我单击并且正在加载新活动时,进度对话框可以很好地工作,但是当我关闭上一个活动时(要返回到此列表),进度对话框仍在运行。我希望进度对话框仅在新活动开始时显示。
有人可以指导我如何正确地做到这一点。
答案 0 :(得分:4)
程序员需要明确删除对话框(或由用户关闭)。所以,它应该以这种方式完成:
活动A中的(呼叫活动)
protected void onListItemClick(ListView l, View v, int position, long id) {
progDialog.show(this, "Showing Data..", "please wait", true, false);
Thread thread = new Thread(this){
// Do heavy weight work
// Activity prepared to fire
progDialog.dismiss();
};
thread.start();
}
虽然在大多数用例中,繁重的工作应该在被调用者Activity上。如果繁重的工作是在被调用者onCreate
完成的,那应该是:
活动B(被叫者):
onCreate(){
progDialog.show(this, "Showing Data..", "please wait", true, false);
Thread thread = new Thread(this){
// Do heavy weight work
// UI ready
progDialog.dismiss();
};
thread.start();
}
无论如何,这个想法仍然是一样的。