これは私が常に使用しているものです。
ProgressDialogのスタイル::
<resources>
<style name="MyProgressDialog" parent="@android:style/Theme.Dialog">
<item name="android:background">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowTitleStyle">@null</item>
</style>
</resources>
マイProgressDialogクラス:
public class MyProgressDialog extends Dialog {
public MyProgressDialog(Context context) {
super(context, R.style.MyProgressDialog);
}
public static MyProgressDialog show(Context context, CharSequence title, CharSequence message) {
return show(context, title, message, false);
}
public static MyProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate) {
return show(context, title, message, indeterminate, false, null);
}
public static MyProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable) {
return show(context, title, message, indeterminate, cancelable, null);
}
public static MyProgressDialog show(Context context, CharSequence title, CharSequence message, boolean indeterminate, boolean cancelable, OnCancelListener onCancelListener) {
MyProgressDialog dialog = new MyProgressDialog(context);
dialog.setCancelable(cancelable);
dialog.setOnCancelListener(onCancelListener);
dialog.setTitle(title);
dialog.addContentView(new ProgressBar(context), new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
dialog.show();
return dialog;
}
}
私はそれだけでタスクとProgressDialog取り扱いだ...など、あなたのUI、あなたのリストボックスの更新について話していません今度は牛肉が来る。 AsyncTaskを内部クラスとして持つListView。 AsyncTaskは、周囲のListActivity(コンテキスト)への参照を保持し、ListActivityはAsyncTaskへの参照を保持します。 ProgressDialogは通常の起動時にAsyncTaskに作成されます。 ListActivityが停止し、AsyncTaskがまだ実行されている場合、ダイアログはListActivityから破棄され、再起動後に再作成されます。
重要なことは、何をやっている人に気づくことです:私は(API 8を使用して)私のアプリケーションの一つで同じことをしなければならなかった
public class MyListActivity extends ListActivity {
private class MyAsyncTask extends AsyncTask<Void, Integer, Boolean> {
/* package */ MyListActivity context;
/* package */ MyProgressDialog dialog;
public MyAsyncTask(MyListActivity context) {
super();
this.context = context;
}
@Override
protected Boolean doInBackground(final Void... voids) {
Boolean rc = false;
// Put your running task here
return rc;
}
@Override
protected void onPostExecute(final Boolean result) {
if (dialog != null) {
try {
dialog.dismiss();
} catch (Exception exception) {
}
dialog = null;
}
if (result) {
// Whatever you need to update in UI
}
context.task = null;
}
@Override
protected void onPreExecute() {
dialog = MyProgressDialog.show(context, null, null, true, false);
}
}
/* package */ MyAsyncTask task;
// Save AsyncTask if running, dismiss ProgressDialog if open
@Override
public Object onRetainNonConfigurationInstance() {
if (task != null) {
if (task.dialog != null) {
task.dialog.dismiss();
task.dialog = null;
}
}
return task;
}
@Override
public void onCreate(final Bundle bundle) {
// Usual start here
// Was task running?
task = (MyAsyncTask) getLastNonConfigurationInstance();
if (task != null) {
// Task was running, update context, restart ProgressDialog
task.context = this;
task.dialog = MyProgressDialog.show(this, null, null, true, false);
} else {
// Task was not running. Start from beginning
task = new MyAsyncTask(this);
task.execute();
}
}
AsyncTaskコードをアップロードできますか???? もっと理解できる... – Wolverine