2016-11-24 18 views
0

Dialog類片段之後崩潰:新的對話框(上下文)被更新buildtoolversion從23至25和的minSdkVersion從14至15

public class Progress { 

    private Context mContext; 

    /** 
    * constructor 
    * @param context 
    */ 
    public Progress(Context context) { 
     this.mContext = context; 
    } 

    /** 
    * show the progress bar 
    * @return 
    */ 
    public Dialog showProgress() { 
     Dialog pDialog = new Dialog(mContext); 
     pDialog.setCancelable(false); 
     pDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     pDialog.setContentView(new MaterialProgressBar(mContext), new ViewGroup.LayoutParams(100, 100)); 
     pDialog.getWindow().setBackgroundDrawable(
       new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
     pDialog.show(); 
     return pDialog; 
    } 



    /** 
    * dismiss the progress bar 
    * @param pDialog 
    */ 
    public void dismissProgress(Dialog pDialog) { 
     if (pDialog != null && pDialog.isShowing()) { 
      pDialog.dismiss(); 
     } 
    } 
} 

在片段呼叫主叫對話框中onCreatemethod

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.mContext = getActivity();  
     progress = new Progress(mContext); 
    progress.showProgress(); 
} 

例外:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference 
                   at android.app.Dialog.<init>(Dialog.java:175) 
                   at android.app.Dialog.<init>(Dialog.java:149) 
                   at com.contus.mcomm.views.Progress.showProgress(Progress.java:44) 
                   at com.contus.mcomm.fragments.ProductListFragment.setUserVisibleHint(ProductListFragment.java:154) 
                   at android.support.v4.app.FragmentStatePagerAdapter.setPrimaryItem(FragmentStatePagerAdapter.java:157) 
                   at android.support.v4.view.ViewPager.populate(ViewPager.java:1270) 
                   at android.support.v4.view.ViewPager.populate(ViewPager.java:1120) 
                   at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1646) 
                   at android.view.View.measure(View.java:18794) 
                   at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) 

Tha nks提前...!

+0

顯示一些異常堆棧跟蹤... – snachmsm

+0

我已經添加了異常,請檢查,任何幫助將是可觀的。 – Nisha

回答

1

SDK更新可能不是問題。有時候getActivity()返回null。所以嘗試在fragment中的onViewCreated()方法中顯示對話框。

欲瞭解更多,您可以檢查這一點 - getActivity() returns null in Fragment function

+0

我已經嘗試了所有的方法,但都沒有工作。 – Nisha

+0

我想,我相信這是由於版本變化而發生的,堅果無法找到它的解決方案。 – Nisha

+0

我有一個類ProductListFragmentImpl extends Fragment {}和另一個類擴展ProductListFragmentImpl,我需要顯示對話框。 – Nisha

0

@androidnoobdev指出正確的

getActivity()可能返回null在onCreate,因爲Fragment可以不附此時任何Activity ...你應該動你的代碼onActivityCreated

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.mContext = getActivity(); //do you really need this? 
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState){ 
    super.onActivityCreated(savedInstanceState); 
    progress = new Progress(getActivity()); 
    progress.showProgress(); 
} 

,如果它沒有顯示,那麼你不重視Fragment正確及其父Activity不存在

也有兩種方法:

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
} 

第一個,與作爲Activity PARAM,已被廢棄在API23和第二個是在相同的API版本引入的。你也可以在這裏移動你的對話框創建代碼