Android pass databundle from activity to fragments (tabs) -
i've been trying id listview-onclicklistener 3 tabbed fragments. user firstly clicks in myticketsfragmentand goes detail page contains 3 swipeable tabs. these views 'hosted' 1 individual activity named ticketactivity. i've succesfully passed data fragment ticketactivity cannot go further that. been searching 2 hours , still no results..
here's code:
myticketsfragment: passing data in setonitemclicklistener tab activity
public void onitemclick(adapterview<?> parentview, view childview, int position, long id) { bundle bundle = new bundle(); bundle.putint("ticketid", mytickets.get(position).getid()); intent ticketdetail = new intent(getactivity(), ticketactivity.class); ticketdetail.addflags(intent.flag_activity_clear_top); ticketdetail.putextras(bundle); startactivity(ticketdetail); } ticketactivity: receiving data , passing through 3 tabs
private viewpager viewpager; private tickettabspageradapter madapter; private actionbar actionbar; // tab titles private string[] tabs = { "info", "intern", "extern" }; public ticketinfofragment ticketinfofragment; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.tabs); // receive data bundle bundle = getintent().getextras(); int ticketid = bundle.getint("ticketid"); // pass data fragments // ... // initilization viewpager = (viewpager) findviewbyid(r.id.pager); actionbar = getactionbar(); madapter = new tickettabspageradapter(getsupportfragmentmanager()); viewpager.setadapter(madapter); actionbar.sethomebuttonenabled(true); actionbar.setnavigationmode(actionbar.navigation_mode_tabs); // adding tabs (string tab_name : tabs) { actionbar.addtab(actionbar.newtab().settext(tab_name) .settablistener(this)); } /** * on swiping viewpager make respective tab selected * */ viewpager.setonpagechangelistener(new viewpager.onpagechangelistener() { @override public void onpageselected(int position) { // on changing page // make respected tab selected actionbar.setselectednavigationitem(position); } @override public void onpagescrolled(int arg0, float arg1, int arg2) { } @override public void onpagescrollstatechanged(int arg0) { } }); } example of tab fragment
public class ticketinfofragment extends fragment { ticketfull ticket = new ticketfull(); private databasehelper db; int ticketid; string androidid; string authcode; string platform_url; int uid; @override public void onattach(activity activity) { super.onattach(activity); db = new databasehelper(getactivity()); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.fragment_ticket_info, container, false); return rootview; } } i pleased if me out
thanks in advance
2 quick ways:
use static method in activity retrieve current ticket id
design , implement interface , register fragments listeners activity
first option, in activity:
private static int ticketid; public static int getcurrentticketid(){ return ticketid; } and in fragment can do:
tickeractivity.getcurrentticketid(); second option, use interface:
public interface ticketlistener{ public void onticketchanged(int newticket); } and in activity add:
public list<ticketlistener> listeners = new arraylist<ticketlistener>(); public void addlistener(ticketlistener listener){ listeners.add(listener); } and register every fragment new listener
yourfragment frag = new yourfragment(); addlistener(frag); and when want notify key listeners iterate on list:
for(ticketlistener listener : listeners){ listener.onticketchanged(ticket); }
Comments
Post a Comment