android - Is it possible to send an object from a fragment to another fragment? -
the object want send fragment fragment "post". demandfragment consist of listview consist of items post objects.
i need send selected item listview, in case postarraylist.get(position), selectedpostfragment.
i've tried bundle not working...
does know how fix this?
demandfragment:
public class demandfragment extends fragment { listview lv; arrayadapter adapter; arraylist<post> postarraylist; private edittext editsearch; @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_demand, container, false); if(rootview != null){ lv = (listview) rootview.findviewbyid(r.id.listdemand); editsearch = (edittext) rootview.findviewbyid(r.id.search_post); lv.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // clicked on item show post post selectedpost = postarraylist.get(position); bundle bundle = new bundle(); bundle.putparcelable("data", (parcelable) selectedpost); fragmentmanager fm = getactivity().getfragmentmanager(); fragment fragment = new rang.afterflight.fragments.selectedpostfragment(); fragment.setarguments(bundle); fm.begintransaction().replace(r.id.content_main, fragment).commit(); } }); } searchpost(); return rootview; } public void searchpost(){ editsearch.addtextchangedlistener(new textwatcher() { @override public void beforetextchanged(charsequence s, int start, int count, int after) { } @override public void ontextchanged(charsequence s, int start, int before, int count) { adapter.getfilter().filter(s); } @override public void aftertextchanged(editable s) { } }); } @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); sethasoptionsmenu(true); parsequery<parseobject> query = parsequery.getquery("post"); postarraylist = new arraylist<post>(); query.findinbackground(new findcallback<parseobject>() { public void done(list<parseobject> postlist, parseexception e) { if (e == null) { (parseobject object : postlist) { post newpost = new post(); newpost.setairportparse((string) object.get("airport")); newpost.setdateparse((string) object.get("date")); newpost.settimeparse((string) object.get("time")); newpost.setpersonsparse((string) object.get("persons")); newpost.setaddressparse((string) object.get("address")); newpost.setflightnrparse((string) object.get("address")); newpost.setusername((string) object.get("username")); newpost.setimagefile((parsefile) object.get("profilepic")); postarraylist.add(newpost); } adapter = new listviewadapter(getactivity(), r.layout.item_cardview, postarraylist); lv.setadapter(adapter); } } }); } }
selectedpostfragment:
public class selectedpostfragment extends fragment { textview airportpost, datepost, timepost, personspost, addresspost, flightnrpost, postedbypost, contactpost; imageview iv; @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_selectedpost, container, false); airportpost = (textview) rootview.findviewbyid(r.id.airport_post); datepost = (textview) rootview.findviewbyid(r.id.date_post); timepost = (textview) rootview.findviewbyid(r.id.time_post); personspost = (textview) rootview.findviewbyid(r.id.persons_post); addresspost = (textview) rootview.findviewbyid(r.id.address_post); flightnrpost = (textview) rootview.findviewbyid(r.id.flightnr_post); postedbypost = (textview) rootview.findviewbyid(r.id.postedby_post); contactpost = (textview) rootview.findviewbyid(r.id.contact_post); post selectedpost = getarguments().getparcelable("object"); string s = (string) selectedpost.get("airport"); log.d("airport name", s); return rootview; } }
post:
@parseclassname("post") public class post extends parseobject implements serializable { public post(){ super(); } public string getid(){ return getstring("objectid"); } public void setid(string id){ put("objectid", id); } ////////// public string getusername(){ return getstring("username"); } public void setusername(string username){ put("username", username); } public string getairportparse(){ return getstring("airport"); } public void setairportparse(string airport){ put("airport", airport); } ////////// public string getdateparse(){ return getstring("date"); } public void setdateparse(string date){ put("date", date); } ////////// public string gettimeparse(){ return getstring("time"); } public void settimeparse(string time){ put("time", time); } ////////// public string getpersonsparse(){ return getstring("persons"); } public void setpersonsparse(string persons){ put("persons", persons); } ////////// public string getaddressparse(){ return getstring("address"); } public void setaddressparse(string address){ put("address", address); } public string getflightnrparse(){ return getstring("flightnr"); } public void setflightnrparse(string flightnr){ put("flightnr", flightnr); } public bitmap getimagefile(){ bitmap bmp = null; parsefile image = getparsefile("profilepic"); if(image != null){ try { byte[] data = image.getdata(); bmp = bitmapfactory.decodebytearray(data, 0, data.length); } catch (parseexception e) { e.printstacktrace(); } } return bmp; } public void setimagefile(parsefile file) { if (file != null) { put("profilepic", file); } } }
i believe post class needs implement parcelable pass in bundle between fragments putparcelable().
check out: parcelable.
this great example.
basic implementation:
public class post extends parseobject implements serializable, parcelable { ... public int describecontents() { return 0; } public void writetoparcel(parcel out, int flags) { out.writestring(getid()); out.writesring(getusername()); ... } public static final parcelable.creator<post> creator = new parcelable.creator<post>() { public post createfromparcel(parcel in) { return new post(in); } public post[] newarray(int size) { return new post[size]; } }; private post(parcel in) { // items must read in order written. setid(in.readstring()); setusername(in.readstring()); ... } } try on size, hope helps.
Comments
Post a Comment