java - Android - NullPointerException in Fragment after callback -
this first time work fragments , don't understand how manage them. in case have 2 fragments show dinamically in framelayout id fragment_place. issue fragmenttransaction(addtobackstack / popbackstack).
in fragment2 show popupmenu when press menubutton on mobile , works expected first time, after go previous fragment , return fragment2 if press menubutton following error
java.lang.nullpointerexception @ android.support.v7.view.menu.menubuilder.<init>(menubuilder.java:216) @ android.support.v7.widget.popupmenu.<init>(popupmenu.java:103) @ android.support.v7.widget.popupmenu.<init>(popupmenu.java:78) @ android.support.v7.widget.popupmenu.<init>(popupmenu.java:63) @ package.fragment2.showpopup(fragment2.java:93)
below code mainactivity , fragment2, driving me crazy, appreciated.
public class mainactivity extends appcompatactivity implements fragment1.onevent { fragment1 frag; fragment2 frag2; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); frag = new frag1(); // begin transaction fragmenttransaction ft = getsupportfragmentmanager().begintransaction(); ft.replace(r.id.fragment_place, frag); ft.commit(); } @override public void oneventselected(string key) { frag2 = new frag2(); fragmenttransaction ft = getsupportfragmentmanager().begintransaction(); ft.replace(r.id.fragment_place,frag2); ft.addtobackstack(null); ft.commit(); } @override public void onbackpressed(){ fragmentmanager ft = getsupportfragmentmanager(); if (ft.getbackstackentrycount() > 0) { ft.popbackstack(); } else { super.onbackpressed(); } } @override public boolean dispatchkeyevent(keyevent event) { int action = event.getaction(); int keycode = event.getkeycode(); switch (keycode) { case keyevent.keycode_menu: if (action == keyevent.action_up) { fragment f = getsupportfragmentmanager().findfragmentbyid(r.id.fragment_place); if (f instanceof fragment2) { sendbroadcast(); } } return true; default: return super.dispatchkeyevent(event); } } private void sendbroadcast(){ intent intent = new intent("popup_menu"); localbroadcastmanager.getinstance(this).sendbroadcast(intent); }}
this problematic fragment. error lines method showpopup
public class fragment2 extends fragment { private string key; private view view; @override public view oncreateview(layoutinflater inflater, viewgroup parent, bundle savedinstancestate) { view = inflater.inflate(r.layout.fragment, parent, false); localbroadcastmanager.getinstance(getactivity()).registerreceiver(mmessagereceiver, new intentfilter("popup_menu")); return view; } private broadcastreceiver mmessagereceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { showpopup(view); } }; public void showpopup(view v) { button b = (button) view.findviewbyid(r.id.b_attach); popupmenu popup = new popupmenu(getactivity(), b); popup.setonmenuitemclicklistener(new popupmenu.onmenuitemclicklistener() { @override public boolean onmenuitemclick(menuitem item) { //dosomething } }); menuinflater inflater = popup.getmenuinflater(); inflater.inflate(r.menu.menu_popup, popup.getmenu()); popup.show(); }}
this way , works me:
fragmentmanager fragmentmanager = getfragmentmanager(); fragmentmanager.begintransaction().replace(r.id.content_frame,new fragment() ).commit();
Comments
Post a Comment