我正在使用以下代码来填充自定义 ListPreference 对话框。由于填充过程需要很多时间,我想在填充过程中显示一个进度对话框。
我的问题是,filler.execute() 不会阻止 onPrepareDialogBuilder 并且函数在值被填充之前一直运行到最后导致异常......知道吗?
@Override
protected void onPrepareDialogBuilder(Builder builder) {
// Load data
if (this.getEntries()==null) {
FillerTask filler = new FillerTask();
filler.execute();
}
Log.d(TAG, "Filler finished");
super.onPrepareDialogBuilder(builder);
}
这是 Filltertask 代码,基本上他会查找每个带有 MAIN Intent 填充列表的活动:
private class FillerTask extends AsyncTask<Void, Void, String[][]> {
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
Log.d(TAG, "Dismiss dialog");
dialog = ProgressDialog.show(MyListPreference.this.getContext(), "", "Doing stuff...", true);
}
@Override
protected String[][] doInBackground(Void... params) {
return fill();
}
public String[][] fill() {
Log.d(TAG, "Fill started");
CREATE LISTS...
// Done
Log.d(TAG, "Fill done");
String[][] result = new String[][] {entryNames, entryValues};
return result;
}
@Override
protected void onPostExecute(String[][] result) {
Log.d(TAG, "Post execute");
MyListPreference.this.setEntries(result[0]);
MyListPreference.this.setEntryValues(result[1]);
dialog.dismiss();
}
}