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

Popular posts from this blog

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

jsf - "PropertyNotWritableException: Illegal Syntax for Set Operation" error when setting value in bean -

arrays - Algorithm to find ideal starting spot in a circle -