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
Post a Comment