java - How to catch passed data (between two fragments) at the right time? -
this might long one:
i have 2 fragments, 1 includes google maps , other 1 ordinary fragment (called infofragment) filled textviews.
on textview want next:
1. change infofragment map fragment (via tabs) 2. send textview id map fragment 3. zoom on marker same id (markers stored in hashmap)
i implemented onclicklistener (in infofragment):
linlayout.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { toast.maketext(getcontext(), "clicked" + id, toast.length_long).show(); tablayout tablayout = (tablayout) getactivity().findviewbyid(r.id.sliding_tabs); tablayout.gettabat(0).select(); } });
and working great, tabs switched , right id stored in variable.
now, want send id map fragment, check hashmap, chose marker same id , zoom on it. know how zoom on it, not know how catch data?
if use singleton class (which store id), in map fragment should catch data?
edit: if call method zoomontextviewclick():
private void zoomontextviewclick(final googlemap mmap) { sharedpreferences sp = preferencemanager.getdefaultsharedpreferences(this.getcontext()); textviewid = sp.getint("text_id", -1); if (textviewid != -1) { markeroptions mark = hash.get(textviewid); mmap.animatecamera(cameraupdatefactory.newlatlngzoom(mark.getposition(), 8)); } //on app restart sharedpreferences.editor editor = sp.edit(); editor.putint("text_id", -1); editor.apply();
in oncreateview this:
public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.map_view, container, false); mview = (mapview) rootview.findviewbyid(r.id.mapview); mview.oncreate(savedinstancestate); mview.onresume(); // needed map display mview.getmapasync(new onmapreadycallback() { @override public void onmapready(googlemap mmap) { googlemap = mmap; //some other stuff happening zoomontextviewclick(mmap); } }); return rootview; }
it work first time (when run app)
if call same method in onresume() this:
@override public void onresume() { super.onresume(); mview.onresume(); mview.getmapasync(new onmapreadycallback() { @override public void onmapready(googlemap mmap) { googlemap = mmap; zoomontextviewclick(mmap); } }); }
nothing happens.
edit #2:
private void settabs() { // viewpager , set it's pageradapter can display items viewpager viewpager = (viewpager) findviewbyid(r.id.viewpager); viewpager.setadapter(new fragpageradapter(getsupportfragmentmanager(), mainactivity.this)); // give tablayout viewpager tablayout tablayout = (tablayout) findviewbyid(r.id.sliding_tabs); tablayout.setupwithviewpager(viewpager); }
this code initializes tabs.
Comments
Post a Comment