[英]Best practice to show ProgressDialogs through an application?
在我的應用程序中,我想顯示某些事件的ProgressDialog
(例如在AsyncTasks
期間)。 我從不希望同時顯示多個ProgressDialogs
。
最佳和最有效的方法是什么? 我當前的代碼如下所示:
public class ProgressDialogHelper {
private static ProgressDialog progressDialog;
public static void showProgressDialog(Context c) {
if (progressDialog == null) {
progressDialog = ProgressDialog.show(c, null, null);
progressDialog.setContentView(R.layout.progress_bar);
}
}
public static void dismissProgressDialog() {
if (progressDialog != null) {
progressDialog.dismiss();
progressDialog = null;
}
}
}
我正在從其他類中調用這些方法以顯示/關閉ProgressDialog
。
這被認為是好的做法嗎? 如果沒有,我應該怎么做?
您正在尋求最佳實踐。 實際上,最佳實踐是不使用ProgressDialog
,因為它們會阻止用戶與應用程序進行交互。
有許多不使用ProgressDialog
。
如果您的應用正在加載列表所需的數據,請放置一個Spinner
而不是ListView。
有關此主題的其他更多信息,請參見此處: Google設計指南:進度
如果您仍然想使用ProgressDialog
我強烈建議您不要使用上面發布的類。 它擁有對progressDialog
的static
引用,因此它是所有活動和活動周期之上的全局引用。 如果您的應用程序被重新創建或其他原因,可能會導致一些麻煩。
我建議您使用一個非static
ProgressDialogHelper
您可以為每個Activity
初始化,然后將處理該Dialog
。 還要確保處理諸如onDestroy
生命周期方法
可以使用@jagmohan指出的BaseActivity,但是如果您不想擁有自己的BaseActivity並希望使用某些東西作為插入對象,則可以創建以下內容:
ProgressDialogHelper.java
public class ProgressDialogHelper {
ProgressDialog mProgressDialog;
public ProgressDialogHelper() {
}
public ProgressDialogHelper(Context context, String title, String message) {
mProgressDialog = new ProgressDialog(context);
mProgressDialog.setTitle(title);
mProgressDialog.setMessage(message);
mProgressDialog.show();
}
public ProgressDialog getProgressDialog() {
return mProgressDialog;
}
public void setProgressDialog(ProgressDialog mProgressDialog) {
//make sure the previous dialog is hidden
hide();
this.mProgressDialog = mProgressDialog;
}
public void show() {
if (mProgressDialog != null && !mProgressDialog.isShowing()) {
mProgressDialog.show();
}
}
public void create(Context context, String title, String message) {
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
mProgressDialog = ProgressDialog.show(context, title, message);
}
public void hide() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
mProgressDialog = null;
}
}
public void onDestroy() {
hide();
}
}
正如@mikepenz指出的那樣,在最新的設計指南中不建議使用ProgressDialogs。 但是,這在過去對我來說很有效。
我曾經設置一個基本的Activity
並添加了一些方法來隱藏和顯示該類中的進度對話框。
public class BaseActivity extends ActionBarActivity {
protected static final String TAG = BaseActivity.class.getSimpleName();
protected ProgressDialog mProgressDialog;
protected void showProgressDialog(String title, String message) {
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
mProgressDialog = ProgressDialog.show(this, title, message);
}
protected void hideProgressDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
mProgressDialog = null;
}
}
@Override
protected void onStop() {
super.onStop();
// hide progress dialog to prevent leaks
hideProgressDialog();
}
// other stuff...
}
現在,您可以在您在項目中創建的新活動類中擴展此基礎活動,並使用這些方法顯示/隱藏進度對話框。
順便說一句,只要確保您從UI線程調用show / hide方法即可。
希望這能回答您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.