android - Navigation Drawer listview not refreshing listitems -


i creating 1 app,and using navigationdrawer , fragments in application,now issue have 5 listitems in navigationdrawer this.

-home
-edit profile
-my orders
-signout
-help

now when user click on signout,all listitems should hide , signin should visible..

following snippet code

  public class mainactivity extends fragmentactivity { private drawerlayout mdrawerlayout; private listview mdrawerlist; private actionbardrawertoggle mdrawertoggle; private string abc; private intent ii; // nav drawer title private charsequence mdrawertitle; // used store app title private charsequence mtitle; // slide menu items private string[] navmenutitles; private typedarray navmenuicons; private arraylist<navdraweritem> navdraweritems; private navdrawerlistadapter adapter; @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      ii=getintent();       mtitle = mdrawertitle = gettitle();      // load slide menu items     navmenutitles = getresources().getstringarray(r.array.nav_drawer_items);      // nav drawer icons resources     navmenuicons = getresources()             .obtaintypedarray(r.array.nav_drawer_icons);      mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout);     mdrawerlist = (listview) findviewbyid(r.id.list_slidermenu);        navdraweritems = new arraylist<navdraweritem>();        navdraweritems.add(new navdraweritem(navmenutitles[0], navmenuicons.getresourceid(0, -1)));     // find people     navdraweritems.add(new navdraweritem(navmenutitles[1], navmenuicons.getresourceid(1, -1)));     // photos     navdraweritems.add(new navdraweritem(navmenutitles[2], navmenuicons.getresourceid(2, -1)));     // communities, add counter here     navdraweritems.add(new navdraweritem(navmenutitles[3], navmenuicons.getresourceid(3, -1)));     // pages     navdraweritems.add(new navdraweritem(navmenutitles[4], navmenuicons.getresourceid(4, -1)));     // what's hot,  add counter here     //navdraweritems.add(new navdraweritem(navmenutitles[5], navmenuicons.getresourceid(5, -1)));       // recycle typed array     //navmenuicons.recycle();      mdrawerlist.setonitemclicklistener(new slidemenuclicklistener());      // setting nav drawer list adapter     adapter = new navdrawerlistadapter(getapplicationcontext(),             navdraweritems);     mdrawerlist.setadapter(adapter);      // enabling action bar app icon , behaving toggle button     getactionbar().setdisplayhomeasupenabled(true);     getactionbar().sethomebuttonenabled(true);      mdrawertoggle = new actionbardrawertoggle(this, mdrawerlayout,             r.drawable.ic_drawer, //nav menu toggle icon             r.string.app_name, // nav drawer open - description accessibility             r.string.app_name // nav drawer close - description accessibility     ) {         public void ondrawerclosed(view view) {             getactionbar().settitle(mtitle);             // calling onprepareoptionsmenu() show action bar icons             invalidateoptionsmenu();         }          public void ondraweropened(view drawerview) {             getactionbar().settitle(mdrawertitle);             // calling onprepareoptionsmenu() hide action bar icons             invalidateoptionsmenu();         }     };     mdrawerlayout.setdrawerlistener(mdrawertoggle);      if (savedinstancestate == null) {         // on first time display view first nav item         displayview(0);     } }  /**  * slide menu item click listener  * */ private class slidemenuclicklistener implements         listview.onitemclicklistener {     @override     public void onitemclick(adapterview<?> parent, view view, int position,             long id) {         // display view selected nav drawer item         displayview(position);          if(position == 4) { // position of sign out button              navdraweritems.clear(); // empty adapter array              navmenuicons.recycle();              navdraweritems.add(new navdraweritem(navmenutitles[0], navmenuicons.getresourceid(0, -1)));             navdraweritems.add(new navdraweritem(navmenutitles[5], navmenuicons.getresourceid(5, -1)));              //navdraweritems.add(new navdraweritem(navmenutitles[signoutindex], navmenuicons.getresourceid(signoutindex, -1));             adapter.notifydatasetchanged();           }         else         {             if(ii.hasextra("login"))             {                 abc=ii.getstringextra("login");                  if(abc.equals("login"))                 {                     navdraweritems.clear();                     navdraweritems.add(new navdraweritem(navmenutitles[0], navmenuicons.getresourceid(0, -1)));                     // find people                     navdraweritems.add(new navdraweritem(navmenutitles[1], navmenuicons.getresourceid(1, -1)));                     // photos                     navdraweritems.add(new navdraweritem(navmenutitles[2], navmenuicons.getresourceid(2, -1)));                     // communities, add counter here                     navdraweritems.add(new navdraweritem(navmenutitles[3], navmenuicons.getresourceid(3, -1)));                     // pages                     navdraweritems.add(new navdraweritem(navmenutitles[4], navmenuicons.getresourceid(4, -1)));                     adapter.notifydatasetchanged();                     toast.maketext(mainactivity.this,"success"+abc,toast.length_long).show();                 }                 else                 {                     toast.maketext(mainactivity.this,"unsuccess"+abc,toast.length_long).show();                 }             }          }     } }  @override public boolean oncreateoptionsmenu(menu menu) {     getmenuinflater().inflate(r.menu.main, menu);     return true; }  @override public boolean onoptionsitemselected(menuitem item) {     // toggle nav drawer on selecting action bar app icon/title     if (mdrawertoggle.onoptionsitemselected(item)) {         return true;     }     // handle action bar actions click     switch (item.getitemid()) {     case r.id.action_settings:         return true;     default:         return super.onoptionsitemselected(item);     } }  /* *  * called when invalidateoptionsmenu() triggered  */ @override public boolean onprepareoptionsmenu(menu menu) {     // if nav drawer opened, hide action items     boolean draweropen = mdrawerlayout.isdraweropen(mdrawerlist);     menu.finditem(r.id.action_settings).setvisible(!draweropen);     return super.onprepareoptionsmenu(menu); }  /**  * diplaying fragment view selected nav drawer list item  * */ private void displayview(int position) {     // update main content replacing fragments     fragment fragment = null;     switch (position) {     case 0:         fragment = new homefragment();         break;     case 1:           fragment = new findpeoplefragment();         break;     case 2:         fragment = new photosfragment();         break;     case 3:         fragment = new communityfragment();         break;     case 4:           fragment = new loginactivity();         break;     case 5:              fragment = new loginactivity();          break;      default:         break;     }      if (fragment != null) {         fragmentmanager fragmentmanager = getsupportfragmentmanager();         fragmentmanager.begintransaction()                 .replace(r.id.frame_container, fragment).commit();          // update selected item , title, close drawer         mdrawerlist.setitemchecked(position, true);         mdrawerlist.setselection(position);         settitle(navmenutitles[position]);         mdrawerlayout.closedrawer(mdrawerlist);     } else {         // error in creating fragment         log.e("mainactivity", "error in creating fragment");     } }  @override public void settitle(charsequence title) {     mtitle = title;     getactionbar().settitle(mtitle); }    @override protected void onpostcreate(bundle savedinstancestate) {     super.onpostcreate(savedinstancestate);     // sync toggle state after onrestoreinstancestate has occurred.     mdrawertoggle.syncstate(); }  @override public void onconfigurationchanged(configuration newconfig) {     super.onconfigurationchanged(newconfig);     // pass configuration change drawer toggls     mdrawertoggle.onconfigurationchanged(newconfig); } 

} loginactivity.java

    public class loginactivity extends fragment{  public loginactivity(){}  private button alreadymember;  @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {     final view rootview = inflater.inflate(r.layout.login_activity, container, false);      alreadymember=(button)rootview.findviewbyid(r.id.btn_login_alredymember);      alreadymember.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view view) {             homefragment tf = new homefragment();             android.support.v4.app.fragmentmanager fm = getfragmentmanager();             android.support.v4.app.fragmenttransaction ft = fm.begintransaction();             ft.replace(r.id.frame_container, tf);             ft.settransition(fragmenttransaction.transit_fragment_fade);             ft.addtobackstack(null);             ft.commit();         }     });     return rootview; } } 

you shouldn't try hide drawer items. update adapter, remove items don't need , invalidate it.

when user clicks on signout, this:

@override public void onitemclick(adapterview<?> parent, view view, int position, long id) {     // display view selected nav drawer item     displayview(position);      // if using fixed positions     if(position == 6) { // position of sign out button          navdraweritems.clear(); // empty adapter array         navdraweritems.add(new navdraweritem(navmenutitles[signoutindex], navmenuicons.getresourceid(signoutindex, -1));         adapter.notifydatasetchanged();      } } 

Comments