android - Unable to access public fields of Fragment after screen orientation -
i have fragment loaded in viewpager
:
public class mfragment extends fragment { public arraylist<string> marraylist; @override public void onsaveinstancestate(bundle outstate) { outstate.putstringarraylist("key", marraylist); super.onsaveinstancestate(outstate); } public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { if (savedinstancestate != null) { marraylist = savedinstancestate.getstringarraylist("key"); } else { marraylist = new arraylist<>(); } ... } }
and inside oncreate()
method of activity class:
mbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { mfragment currentfragment = (mfragment) mfragmentpageradapter.getitem(mviewpager.getcurrentitem()); currentfragment.marraylist.clear(); } });
i clear arraylist
clicking on mbutton
, after changing screen orientation got following error:
06-14 17:35:08.274 1995-1995/? e/androidruntime﹕ fatal exception: main process: a.wallpaper, pid: 1995 java.lang.nullpointerexception: attempt invoke virtual method 'void java.util.arraylist.clear()' on null object reference @ a.wallpaper.mainactivity$6.onclick(mainactivity.java:123) @ android.view.view.performclick(view.java:4780) @ android.view.view$performclick.run(view.java:19866) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:135) @ android.app.activitythread.main(activitythread.java:5254) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:903) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:698)
based on this answer, after overriding instantiateitem()
method inside mfragmentpageradapter
class, error went away:
@override public object instantiateitem(viewgroup container, int position) { galleryfragment fragment = (galleryfragment) super.instantiateitem(container, position); fragments[position] = fragment; return fragment; }
Comments
Post a Comment