java - ClassCastException when resuming activity in android -


i trying use code

public class tabactivity extends sherlockfragmentactivity implements actionbar.tablistener, onitemselectedlistener {     enum tabtype     {         search, list, favorites     }  // tab stacks private hashmap<tabtype, stack<string>> backstacks;  @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);      // initialize actionbar     actionbar bar = getsupportactionbar();     bar.setnavigationmode(actionbar.navigation_mode_tabs);      // set stacks     if (savedinstancestate != null)     {         // read stacks after orientation change         backstacks = (hashmap<tabtype, stack<string>>) savedinstancestate.getserializable("stacks");     }     else     {         // initialize stacks on first run         backstacks = new hashmap<tabtype, stack<string>>();         backstacks.put(tabtype.search, new stack<string>());         backstacks.put(tabtype.list, new stack<string>());         backstacks.put(tabtype.favorites, new stack<string>());     }      // create tabs     bar.addtab(bar.newtab().settag(tabtype.search).settext("search").settablistener(this));     bar.addtab(bar.newtab().settag(tabtype.list).settext("list").settablistener(this));     bar.addtab(bar.newtab().settag(tabtype.favorites).settext("favorites").settablistener(this)); }  @override protected void onresume() {     super.onresume();     // select proper stack     tab tab = getsupportactionbar().getselectedtab();     stack<string> backstack = backstacks.get(tab.gettag());     if (! backstack.isempty())     {         // restore topmost fragment (e.g. after application switch)         string tag = backstack.peek();         fragment fragment = getsupportfragmentmanager().findfragmentbytag(tag);         if (fragment.isdetached())         {             fragmenttransaction ft = getsupportfragmentmanager().begintransaction();             ft.attach(fragment);             ft.commit();         }     } }  @override protected void onpause() {     super.onpause();     // select proper stack     tab tab = getsupportactionbar().getselectedtab();     stack<string> backstack = backstacks.get(tab.gettag());     if (! backstack.isempty())     {         // detach topmost fragment otherwise not correctly displayed         // after orientation change         string tag = backstack.peek();         fragmenttransaction ft = getsupportfragmentmanager().begintransaction();         fragment fragment = getsupportfragmentmanager().findfragmentbytag(tag);         ft.detach(fragment);         ft.commit();     } }  @override protected void onrestoreinstancestate(bundle savedinstancestate) {     super.onrestoreinstancestate(savedinstancestate);     // restore selected tab     int saved = savedinstancestate.getint("tab", 0);     if (saved != getsupportactionbar().getselectednavigationindex())         getsupportactionbar().setselectednavigationitem(saved); }  @override protected void onsaveinstancestate(bundle outstate) {     super.onsaveinstancestate(outstate);     // save selected tab , stacks     outstate.putint("tab", getsupportactionbar().getselectednavigationindex());     outstate.putserializable("stacks", backstacks); }  @override public void onbackpressed() {     // select proper stack     tab tab = getsupportactionbar().getselectedtab();     stack<string> backstack = backstacks.get(tab.gettag());     string tag = backstack.pop();     if (backstack.isempty())     {         // let application finish         super.onbackpressed();     }     else     {         fragmenttransaction ft = getsupportfragmentmanager().begintransaction();         fragment fragment = getsupportfragmentmanager().findfragmentbytag(tag);         // animate return previous fragment         ft.setcustomanimations(r.anim.slide_from_right, r.anim.slide_to_left);         // remove topmost fragment stack , forget         ft.remove(fragment);         showfragment(backstack, ft);         ft.commit();     } }  @override public void ontabselected(tab tab, fragmenttransaction ft) {     // select proper stack     stack<string> backstack = backstacks.get(tab.gettag());     if (backstack.isempty())     {         // if empty instantiate , add initial tab fragment         fragment fragment;         switch ((tabtype) tab.gettag())         {             case search:                 fragment = fragment.instantiate(this, searchfragment.class.getname());                 break;             case list:                 fragment = fragment.instantiate(this, listfragment.class.getname());                 break;             case favorites:                 fragment = fragment.instantiate(this, favoritesfragment.class.getname());                 break;             default:                 throw new java.lang.illegalargumentexception("unknown tab");         }         addfragment(fragment, backstack, ft);     }     else     {         // show topmost fragment         showfragment(backstack, ft);     } }  @override public void ontabunselected(tab tab, fragmenttransaction ft) {     // select proper stack     stack<string> backstack = backstacks.get(tab.gettag());     // topmost fragment     string tag = backstack.peek();     fragment fragment = getsupportfragmentmanager().findfragmentbytag(tag);     // detach     ft.detach(fragment); }  @override public void ontabreselected(tab tab, fragmenttransaction ft) {     // select proper stack     stack<string> backstack = backstacks.get(tab.gettag());      if (backstack.size() > 1)         ft.setcustomanimations(r.anim.slide_from_right, r.anim.slide_to_left);     // clean stack leaving initial fragment     while (backstack.size() > 1)     {         // pop topmost fragment         string tag = backstack.pop();         fragment fragment = getsupportfragmentmanager().findfragmentbytag(tag);         // remove         ft.remove(fragment);     }     showfragment(backstack, ft); }  private void addfragment(fragment fragment) {     // select proper stack     tab tab = getsupportactionbar().getselectedtab();     stack<string> backstack = backstacks.get(tab.gettag());      fragmenttransaction ft = getsupportfragmentmanager().begintransaction();     // animate transfer new fragment     ft.setcustomanimations(r.anim.slide_from_left, r.anim.slide_to_right);     // topmost fragment     string tag = backstack.peek();     fragment top = getsupportfragmentmanager().findfragmentbytag(tag);     ft.detach(top);     // add new fragment     addfragment(fragment, backstack, ft);     ft.commit(); }  private void addfragment(fragment fragment, stack<string> backstack, fragmenttransaction ft) {     // add fragment stack unique tag     string tag = uuid.randomuuid().tostring();     ft.add(android.r.id.content, fragment, tag);     backstack.push(tag); }  private void showfragment(stack<string> backstack, fragmenttransaction ft) {     // peek topmost fragment stack     string tag = backstack.peek();     fragment fragment = getsupportfragmentmanager().findfragmentbytag(tag);     // , attach     ft.attach(fragment); }  // following code shows how open new fragment. assumes // parent fragment calls activity via interface. approach // described in android development guidelines. @override public void onitemselected(string item) {     itemfragment fragment = new itemfragment();     bundle args = new bundle();     args.putstring("item", item);     fragment.setarguments(args);     addfragment(fragment); } 

}

in app, doing navigation tabs. know, there used lot of deprecated methods, want start this. working great except when app getting background , need resumed (after longer time, think cleared rams). getting

java.lang.classcastexception: java.util.arraylist cannot cast java.util.stack

when calling (73 line in code)

stack backstack = backstacks.get(tab.gettag());

what wrong? why works when activity starting first time, onresume gives anr?

this happening i'd because backstacks.get(tab.gettag()); returns list not stack. try instead:

list backstack = backstacks.get(tab.gettag()); 

you shouldn't using raw types.


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -