次のコードを使用して、カスタム 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();
}
}