Java 为什么((MainActivity)getActivity()会给我一个NullPointerException?
你好 我有以下代码: EventPopup.javaJava 为什么((MainActivity)getActivity()会给我一个NullPointerException?,java,android,nullpointerexception,Java,Android,Nullpointerexception,你好 我有以下代码: EventPopup.java class EventPopup extends Dialog { private boolean delete; private boolean edit; private boolean editall; private ReadEvent event; 。。。 } java(这是一个片段) MainActivity.java: public void refreshViewPager() { doubleViewPager
class EventPopup extends Dialog {
private boolean delete;
private boolean edit;
private boolean editall;
private ReadEvent event;
。。。
}
java(这是一个片段)
MainActivity.java:
public void refreshViewPager() {
doubleViewPager.getAdapter().notifyDataSetChanged();
}
为什么这一行有时在某些设备上给出NullPointerException(在其他设备上则不是)?:
错误消息是:
java.lang.NullPointerException:
在de.ubik.terminkalender.DayFragment$8$1.onDismiss(DayFragment.java:1378)
在android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1749)中
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6692)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1468)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
我有以下结构:MainActivity(带viewpager)->DayFragment(作为片段)->Dialog。当我关闭对话框时,我想检查对话框中是否单击了按钮。单击后,在MainActivity中刷新viewpager。如何实现这一点?
onDismiss
这意味着您的对话框已被取消,它将自己与活动分离,这意味着
getActivity()
将返回null。最好找到另一种方法来刷新viewpager。如何执行此操作取决于刷新的原因。onDismiss
这意味着您的对话框已被取消,它将自己与活动分离,这意味着
getActivity()
将返回null。最好找到另一种方法来刷新viewpager。如何执行此操作取决于刷新的原因。正如@Deev所提到的,您将始终得到一个空值,解决方法是从某些以getActivity为参数的方法调用您的对话框
示例代码:
//call this from your fragment
showDialog(getActivity());
在你的碎片里,这个地方
public void showDialog(final Activity activity){
final EventPopup eventpopup = new EventPopup(activity, readevent);
eventpopup.show();
eventpopup.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
if(eventpopup.getDelete()) {
((MainActivity)activity).refreshViewPager();
} else if (eventpopup.getEdit()) {
((MainActivity) activity).doEditEvent(readevent, eventpopup.getEditAll());
}
}
});
}
这肯定会起作用。正如@Deev所提到的,您总是会得到一个空值,解决方法是从一些以getActivity为参数的方法调用您的对话框 示例代码:
//call this from your fragment
showDialog(getActivity());
在你的碎片里,这个地方
public void showDialog(final Activity activity){
final EventPopup eventpopup = new EventPopup(activity, readevent);
eventpopup.show();
eventpopup.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
if(eventpopup.getDelete()) {
((MainActivity)activity).refreshViewPager();
} else if (eventpopup.getEdit()) {
((MainActivity) activity).doEditEvent(readevent, eventpopup.getEditAll());
}
}
});
}
这肯定会起作用。我有以下结构:MainActivity(带viewpager)->DayFragment(作为片段)->Dialog。当我关闭对话框时,我想检查对话框中是否单击了按钮。单击后,在MainActivity中刷新viewpager。如何实现这一点?与其使用“refreshViewpager”回调,不如使用“buttonClicked”回调。该对话框将告诉活动该按钮已单击。然后活动将关闭对话框并刷新自己。当我关闭对话框时,我想检查对话框中是否单击了按钮。单击后,在MainActivity中刷新viewpager。如何实现这一点?与其使用“refreshViewpager”回调,不如使用“buttonClicked”回调。该对话框将告诉活动该按钮已单击。然后活动将关闭对话框并刷新自身。好的,我将尝试该操作。好的,我将尝试该操作