2017-05-06 15 views
-1

私は1つがActivityFragmentがたくさんあります。私はこれらのフラグメントをhide & showで切り替えました。初めてのことは大丈夫ですが、アプリを終了してアプリを再起動したときにクラッシュしました。ここAndroid Fragment show ProgressDialogクラッシュ

は例外メッセージである:

[ 05-10 10:47:12.561 15134:15134 E/   ] 
        android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
         at android.view.ViewRootImpl.setView(ViewRootImpl.java:606) 
         at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:311) 
         at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) 
         at android.app.Dialog.show(Dialog.java:325) 
         at ruiming.com.medicalmanagement.view.MainActivity.showProgressDialog(MainActivity.java:447) 
         at ruiming.com.medicalmanagement.view.PatientsCases.loadList(PatientsCases.java:106) 
         at ruiming.com.medicalmanagement.view.PatientsCases.onViewCreated(PatientsCases.java:92) 
         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:908) 
         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1069) 
         at android.app.BackStackRecord.run(BackStackRecord.java:834) 
         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1454) 
         at android.app.FragmentManagerImpl$1.run(FragmentManager.java:447) 
         at android.os.Handler.handleCallback(Handler.java:739) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:135) 
         at android.app.ActivityThread.main(ActivityThread.java:5689) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

これはprogressDialogshowhideと関数である:

private static ProgressDialog progressDialog; 

public static void showProgressDialog(Activity mActivity) { 
    if(progressDialog == null){ 
     progressDialog = ProgressDialog.show(mActivity, "Please wait", "Loading...", true, false); 
    } 
    if(!mActivity.isFinishing() && !progressDialog.isShowing()){ 
     progressDialog.show(); 
    }  
} 

public static void hideProgressDialog() { 
    if (progressDialog != null && progressDialog.isShowing()) { 
     progressDialog.dismiss(); 
    } 
} 

これらの機能は、活性がありました。

これは私のフラグメントのコードです:私は私のコードが悪いのか分からない

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     MainActivity.showProgressDialog(getActivity()); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       mList = MyJDBCUtil.getPrAcupuntrueCode(getActivity()); 
       try { 
        Thread.sleep(500); 
        EventBus.getDefault().post(new EventBean.PrDiagonsisEvent("3")); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 

    } 

    @Subscribe(threadMode = ThreadMode.MAIN, priority = 0, sticky = false) 
    public void refreshList(EventBean.PrDiagonsisEvent pr) { 
     if (pr.getMsg().equals("3")) { 
      adapter = new TreatmentAdapter(getActivity()); 
      lvTreatmentList.setAdapter(adapter); 
      MainActivity.hideProgressDialog(); 
     } 
    } 

。任意の提案をしてください、あなたのshowProgressDialog()あなたが呼んでいるで

+1

あなたの全体のlogcatを投稿することができますようにコードを修正しますか? hideProgressDialogメソッドでエラーが発生した場合、アクティビティが表示されなくなった後にrefreshListメソッドが呼び出されている可能性があります。また、すべてのウィンドウクラスの静的参照を保持しないでください。ProgressDialogにはアクティビティへの参照が含まれているため、大きなメモリリークが発生しています。 – jonathanrz

+0

@jonathanrz私はlogcat全体を投稿します。このエラーは、showProgressDialogで発生します。エラーの場所はprogressDialog.show()です。私は参照で何が起こるか理解していない。いくつか提案していただけますか? –

答えて

0

:?

progressDialog.show(); 

2回..あなたは、もはや存在しないコンテキストのdialogを示しているときにエラーが発生し

..だから

public static void showProgressDialog(Activity mActivity) { 
    if((progressDialog == null) && (!mActivity.isFinishing())){ 
     progressDialog = ProgressDialog.show(mActivity, "Please wait", "Loading...", true, false); 
    } 
    if(!mActivity.isFinishing() && !progressDialog.isShowing()){ 
     progressDialog.show(); 
    }  
} 
+1

申し訳ありませんが、動作しませんでした。問題はまだここにあります。 –

関連する問題