java - Saving arrayList instead of overriding of each item click in Navigation Drawer? -


i've got navigation drawer list of items home, news, photos. when click item, corresponding fragment loaded , shown.

suppose if click news, performs async task , saves data in arraylist. problem is, if hit news item again in navigation drawer, deletes old arraylist values , shows new items (i.e overriding).

since i'm new fragment, couldn't figure out how save old arraylist values.

mainactivity.java

demofragment fragment = new demofragment(); getsupportfragmentmanager().begintransaction().replace(r.id.frame_container, fragment).commit(); 

demofragment.java

public class demofragment extends fragment {     recyclerview recyclerview;     arraylist<post> postarraylist;     postrecycleradapter postrecycleradapter;     progresswheel progresswheel;         public demofragment() {          // required empty public constructor            }      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);        }      @override     public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) {         // inflate layout fragment             view v = inflater.inflate(r.layout.fragment_post, container, false);         recyclerview = (recyclerview) v.findviewbyid(r.id.posts_list);         // progressbar = (progressbar)v.findviewbyid(r.id.progressbar);         progresswheel = (progresswheel) v.findviewbyid(r.id.progress_wheel);          recyclerview.sethasfixedsize(true);          // use linear layout manager         linearlayoutmanager mlayoutmanager = new linearlayoutmanager(getactivity());         recyclerview.setlayoutmanager(mlayoutmanager);           new loadposts(getactivity(), progresswheel, recyclerview).execute();         return v;     }      @override     public void onactivitycreated(bundle savedinstancestate) {         super.onactivitycreated(savedinstancestate);          setretaininstance(true);       }  } 

loadposts.java

class loadposts extends asynctask<void, void, void> {     progressdialog progressdialog;     list<parseobject> parseobjects;     context context;     fragmentmanager supportfragmentmanager;     arraylist<post> postarraylist;     string postc, postt,posti;     recyclerview recyclerview;     progresswheel progresswheel;       public loadposts(fragmentactivity context, progresswheel progresswheel, recyclerview recyclerview) {          this.context = context;         this.progresswheel = progresswheel;         this.recyclerview = recyclerview;      }       @override     protected void onpreexecute() {         super.onpreexecute();          progressdialog = new progressdialog(context);         progressdialog.setmessage("loading...");         //progressdialog.show();         progresswheel.setvisibility(view.visible);     }      @override     protected void doinbackground(void... avoid) {              postarraylist = new arraylist<>();             // dont care postc, postt. these values parse db             post post = new post();             post.setcontent(postc);             post.setcreatedat(postt);             postarraylist.add(post);           return null;     }      @override     protected void onpostexecute(void avoid) {         super.onpostexecute(avoid);          progresswheel.setvisibility(view.gone);            postrecycleradapter postrecycleradapter = new postrecycleradapter(context, postarraylist);         recyclerview.setadapter(postrecycleradapter);         supportfragmentmanager.begintransaction().replace(r.id.frame_container, fragment).commit();     }  } 

you need return data postarraylist caller, coming oncreateview. remember when call asynctask, ui thread created/used, afterwards data released memory (at point in time).

change from:

public loadposts(fragmentactivity context, progresswheel progresswheel, recyclerview recyclerview) 

to (as example, change third parameter):

public loadposts(fragmentactivity context, progresswheel progresswheel, arraylist<post> postarraylist) 

and in asynctask, change from:

@override protected void onpostexecute(string result) { 

to:

@override protected void onpostexecute(arraylist<post> postarraylist) {    super.onpostexecute(postarraylist);     return postarraylist; ... } 

notes:

  • basically idea return modified data fragment class. never had this. think asynctask built doing stuff in background, , forget result.
  • the google webpage says

onpostexecute(result), invoked on ui thread after background computation finishes.

, link @ asynctask. search text it.

try out, keep posted...


Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -