android - getActivity().getActionBar() on first fragment crash -


public class mainactivity extends actionbaractivity {      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);         setupviewpager();      }      private void setupviewpager() {         // todo auto-generated method stub         fragmentpageritemadapter adapter = new fragmentpageritemadapter(                 getsupportfragmentmanager(), fragmentpageritems.with(this)                         .add("home", homefragment.class)                         .add("message", messagefragment.class)                         .add("my", myfragment.class).create());          viewpager viewpager = (viewpager) findviewbyid(r.id.viewpager);         viewpager.setadapter(adapter);         smarttablayout viewpagertab = (smarttablayout) findviewbyid(r.id.viewpagertab);         final layoutinflater inflater = layoutinflater.from(viewpagertab.getcontext());         final resources res = viewpagertab.getcontext().getresources();         viewpagertab.setcustomtabview(new smarttablayout.tabprovider() {             @override             public view createtabview(viewgroup container, int position,pageradapter adapter) {                 imageview icon = (imageview) inflater.inflate(r.layout.mainactivity_tab, container, false);                 switch (position) {                 case 0:                     icon.setimagedrawable(res.getdrawable(r.drawable.mainactivity_tab_icon_home));                     break;                 case 1:                     icon.setimagedrawable(res.getdrawable(r.drawable.mainactivity_tab_icon_message));                     break;                 case 2:                     icon.setimagedrawable(res.getdrawable(r.drawable.mainactivity_tab_icon_my));                     break;                 default:                     throw new illegalstateexception("invalid position: "+ position);                 }                 return icon;             }         });         viewpagertab.setviewpager(viewpager);      } 

here code in 3 fragment

public class homefragment extends fragment {     view rootview;      @override     public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {         rootview = inflater.inflate(r.layout.fragment_home, container, false);          textview title = (textview) rootview.findviewbyid(r.id.item_title);         title.settext("home");          return rootview;     }      @override     public void setmenuvisibility(final boolean visible) {         super.setmenuvisibility(visible);         if (visible) {             log.d("action bar", "home");              actionbar mactionbar= getactivity().getactionbar();             mactionbar.setdisplayshowhomeenabled(true);             mactionbar.setdisplayshowtitleenabled(false);              layoutinflater minflater = layoutinflater.from(getactivity());             view mcustomview = minflater.inflate(r.layout.actionbar_message, null);             mactionbar.setcustomview(mcustomview);             mactionbar.setdisplayshowcustomenabled(true);             textview title = (textview) mcustomview.findviewbyid(r.id.actionbar_message_title);              title.settext("home action bar");         }     } 

they work on messagefragment.class , myfragment not homefragment. crash , actionbar mactionbar = getactivity().getactionbar(); return null , crash.

why works on messagefragment , myfragment?

homefragment first fragment show.

my idea: use different custom action bar on different fragment.

the problem fragment not attached activity when setmenuvisibility called. therefore getactivity returns null.

i don't understand why you'd want mess method in first place. can modify the action bar in oncreateview:

@override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {     rootview = inflater.inflate(r.layout.fragment_home, container, false);      {         textview title = (textview) rootview.findviewbyid(r.id.item_title);         title.settext("home");     }      actionbar mactionbar= getactivity().getactionbar();     mactionbar.setdisplayshowhomeenabled(true);     mactionbar.setdisplayshowtitleenabled(false);      layoutinflater minflater = layoutinflater.from(getactivity());     view mcustomview = minflater.inflate(r.layout.actionbar_message, null);     mactionbar.setcustomview(mcustomview);     mactionbar.setdisplayshowcustomenabled(true);     textview title = (textview) mcustomview.findviewbyid(r.id.actionbar_message_title);      title.settext("message action bar");      return rootview; } 

if need use of method, try simple null check:

if (visible && getactivity() != null) { 

Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -