以下是关于我的应用的一些事实,然后是一个问题
我的应用有两个片段。
我的应用程序在首次启动时创建了某些文件结构和文档,这需要时间,因此我在创建文件结构时使用AsyncTask
类方法显示ProgressDialog
。这是在我的MainActivity的onCreate
方法中完成的,就像这样:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
progress = new ProgressDialog(this);
progress.setMessage("Loading...");
File testFile = new File("/mnt/sdcard/myNewFolder");
if (!testFile.exists()) {
new MyTask(progress).execute();
setContentView(R.layout.activity_main);
} else
setContentView(R.layout.activity_main);
}
问题是onActivityCreated
之一的Fragment
方法在new MyTask(progress).execute();
完成之前开始运行。这会导致错误和问题。
为什么我onActivityCreated
之一的Fragment
方法会在之前运行
new MyTask(progress).execute();
...
请不要假设我没有考虑到一些愚蠢的错误xx
这是我的MyTask类
public class MyTask extends AsyncTask<Void, Void, Void> {
public MyTask(ProgressDialog progress) {
// this.progress = progress;
}
public void onPreExecute() {
progress.show();
}
public void onPostExecute(Void unused) {
progress.dismiss();
}
@Override
protected Void doInBackground(Void... params) {
CreateFileStructure();
return null;
}
}
我需要在其他任何事情发生之前创建该文件结构 - 这就是我使用此ProgressDialog
的原因。我做错了什么?
答案 0 :(得分:1)
如果你看到片段的生命周期,那么片段的视图就会在包含片段的活动的onCreate方法上实例化。
因此你得到了这个错误。
答案 1 :(得分:0)
以下是适用于我的代码 - 在创建文件结构和文件时显示ProgressDialog
对话框,之后发生其他所有内容(片段等)。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
progress = new ProgressDialog(this);
progress.setMessage("Loading...");
File testFile = new File("/mnt/sdcard/myNewFolder");
if (!testFile.exists())
new MyTask(progress).execute();
else
setContentView(R.layout.activity_main);
}
public class MyTask extends AsyncTask<Void, Void, Void> {
public MyTask(ProgressDialog progress) {
// this.progress = progress;
}
public void onPreExecute() {
progress.show();
}
public void onPostExecute(Void unused) {
progress.dismiss();
setContentView(R.layout.activity_main);
}
@Override
protected Void doInBackground(Void... params) {
CreateFileStructure();
return null;
}
}