2016-11-14 54 views
1

我做了一個實用程序類來打開和關閉進度對話框這樣安卓進度對話框上提高近

Utils.java

public class Utils { 

    private static Utils util; 
    private Typeface typeface; 
    private ProgressDialog progressDialog; 

    public static Utils getInstance(){ 

     if(util == null){ 
      util = new Utils(); 
     } 
     return util; 
    } 

    public void showProgressDialog(Activity activity){ 

     if(progressDialog != null && progressDialog.isShowing()){ 
      return; 
     } 

     if(progressDialog == null) { 
      progressDialog = new ProgressDialog(activity); 
     } 
     progressDialog.setMessage("Loading..."); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 
    } 

public void closeProgressDialog(){ 
    try { 
     if (progressDialog != null && progressDialog.isShowing()) { 
      progressDialog.dismiss(); 
      progressDialog = null; 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    } 
} 

,然後我之前的數據加載後的數據和closeProgressDialog調用showProgressDialog已被加載。這樣

Acvitity代碼

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_dashboard,container,false); 
    activity = getActivity(); 
    ButterKnife.bind(this,view); 

    init(); 
    return view; 
} 

    private void init() { 

    Utils.getInstance().showProgressDialog(activity); 
    getPatientsList(); 


    //in response i am calling closeProgressDialog(); 
    } 

public void onPatientListResponse(String response){ 
     Utils.getInstance().closeProgressDialog(); // raises exception here 
    } 

但它在closeProgressDialog產生異常();

java.lang.IllegalArgumentException: View=com.android.internal.policy.PhoneWindow$DecorView{f7fd12e V.E...... R......D 0,0-1024,232} not attached to window manager 

回答

1

試試這個,

反正ü[R檢查progressDialog是否已經顯示出,如果是ü[R剛剛返回控制。而不是解僱progressDialog並創建一個新實例。因爲舊的進度Dialog可能以不同的上下文開始。

public void showProgressDialog(Activity activity){ 

     if(progressDialog != null && progressDialog.isShowing()){ 
      progressDialog.dismiss(); 
      progressDialog = null; 
     } 

     if(progressDialog == null) { 
      progressDialog = new ProgressDialog(activity); 
     } 
     progressDialog.setMessage("Loading..."); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progressDialog.setCancelable(false); 

     if(!activity.isFinishing()) 
      progressDialog.show(); 
    } 
+1

非常感謝。事實上,在之前的活動中,我在調用新活動之前沒有調用closeProgressDialog()。因此,在調用showProgressDialog()的新活動中,它剛剛返回上一個對話框。所以對話以前的活動,我在新活動中呼籲closedialog.Thanks很多! –

+0

現在我確保在離開活動或片段之前調用closedialog。 –

+0

@Androidjack很高興!幫助:) – Raghavendra

0

您還沒有初始化的進度條和你要檢查,如果它顯示...

在這裏你尚未初始化進度,但因爲你的條件是& &(AND)編譯器應該同時檢查,發現progressDialog是空的,因此有沒有爲它isShowing方法...

if(progressDialog != null && progressDialog.isShowing()){ 
     return; 
    } 
-------------------------------------------------- 
public void showProgressDialog(Activity activity){ 
    if(progressDialog == null) { 
     progressDialog = new ProgressDialog(activity); 
    } 
    progressDialog.setMessage("Loading..."); 
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    progressDialog.setCancelable(false); 
    progressDialog.show(); 
} 

一個建議是使用語境,而不是活動的進度。

乾杯!

+0

在那裏我有沒有初始化呢? –

+0

是的,但我檢查它沒有給出例外。 –

1
public void showProgressDialog(Activity activity){ 

     if(progressDialog != null){ // Ensure it's not null 
      if(progressDialog.isShowing()) // if it's showing than return. 
      return; 
     }else{ 
      //It will create an instance of new object. 
      progressDialog = new ProgressDialog(activity); 
     } 

     progressDialog.setMessage("Loading..."); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
     progressDialog.setCancelable(false); 
     progressDialog.show(); 
    } 
+0

OP是做同樣的事情嗎? – Raghavendra

+0

@Raghavendra不,他檢查不是空的,而是檢查isVisible,我確實分開了一個null條件,以確保它不是第一個null。 – QuokMoon

+0

我想你已經知道這一點,如果條件是如果有兩個條件,如果第一個失敗,它不會檢查第二個權利,在這種情況下,他在做什麼對我來說很好。 – Raghavendra