Android 在DialogFragment';简历
在我的DialogFragment中,我只做:Android 在DialogFragment';简历,android,dialogfragment,Android,Dialogfragment,在我的DialogFragment中,我只做: override fun onResume() { super.onResume() dismissDialog() getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, DimenUtil.dpToPx(220f, resources)); getDialog().getWindow().
override fun onResume() {
super.onResume()
dismissDialog()
getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, DimenUtil.dpToPx(220f, resources));
getDialog().getWindow().setGravity(Gravity.BOTTOM)
getDialog().setCanceledOnTouchOutside(false)
}
但我得到了NPE:
Unable to resume activity {PublishActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3308)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3344)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1583)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5773)
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:1004)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:799)
在我的活动中,我启动了一个DialogFragment并得到了这个错误。这种情况会发生几次。您应该对照
getDialog()
进行检查。如果不为空,您应该将代码复制到onViewCreated/onCreate
以应用LayoutParameters
,只要对照NPE
进行检查,您就可以将代码保存在Resume
中
if(getDialog() !=null){
dismissDialog()
getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, DimenUtil.dpToPx(220f, resources));
getDialog().getWindow().setGravity(Gravity.BOTTOM)
getDialog().setCanceledOnTouchOutside(false)
}
我只是不知道为什么getDialog()返回null在
dismissDialog()方法中到底发生了什么?如果您实际上正在那里调用disclesh()
,那么getDialog()
可能会在这之后返回null
。