在尝试通过@ Slartibartfast的答案来表达How to show ProgressDialog across launching a new Activity?时,我试图让它在我的编辑器中运行失败。在这里,我试图在程序获取一些联系人信息时显示一个响铃进度。然后,在OnCreate中,它将它放在ListView中。我的问题是没有出现progressDialog。我的代码如下:
声明
private ProgressDialog ringProgressDialog = null;
AsyncTask - 设置并结束响铃progressDialog
private class load_contact_list extends AsyncTask<String, Void, Integer> {
@Override
protected Integer doInBackground(String... url) {
...
}
@Override
protected void onPostExecute(Integer list_length) {
ringProgressDialog.dismiss();
setContentView(R.layout.activity_main);
}
}
OnCreate中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ringProgressDialog = ProgressDialog.show(MainActivity.this, "Loading contacts", "Please Wait", true);
new load_contact_list().execute(...);
}
...
我尽最大努力使我的代码像他一样已经证明了,我不知道为什么它不起作用。提前谢谢。
编辑: doInBackground()中的省略号集是获取联系人信息的位置。 OnCreate中的另一组是将信息放入列表的位置。
答案 0 :(得分:2)
当您按照创建方式创建ProgressDialog
时,问题就在于此问题。另外,最好在ProgressDialog
类中的onPreExecute()
方法中启动AsyncTask
。
为AsyncTask
类创建构造函数,这样您就可以通过类实例化发送上下文引用,并在ProgressDialog
类中声明AsyncTask
。
private class load_contact_list extends AsyncTask<String, Void, Integer>
{
private Activity mActivity;
private Context mContext;
private ProgressDialog mDialog;
// Constructor
public ProgressTask(Activity activity)
{
this.mActivity= activity;
mContext= activity;
// Here we create a new instance of the ProgressDialog with the context received as parameter
mDialog= new ProgressDialog(mContext);
}
protected void onPreExecute()
{
// We use the ProgressDialog object instantiated in this class's constructor
this.mDialog.setMessage("Loading contacts");
this.mDialog.show();
}
@Override
protected Integer doInBackground(String... url)
{
// ...
}
@Override
protected void onPostExecute(Integer list_length)
{
// Here we dismiss the ProgressDialog created in this class's constructor
if(mDialog.isShowing())
{
this.mDialog.dismiss();
}
setContentView(R.layout.activity_main);
}
}
现在,在您的活动onCreate()
方法中,您执行AsyncTask
,并且不要忘记通过AsyncTask
构造函数发送活动的上下文。< / p>
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Execute the AsyncTask class by sending the context by parameter via its constructor
new load_contact_list(this).execute();
}
希望它对你有所帮助。