android - Getting the current Fragment instance in the viewpager -


below code has 3 fragment classes each embedded each of 3 tabs on viewpager. have menu option. shown in onoptionsitemselected(), selecting option, need update fragment visible. update have call method in fragment class. can please suggest how call method?

public class mainactivity  extends actionbaractivity {       viewpager viewpager;      tabsadapter tabsadapter;       @override         public void oncreate(bundle savedinstancestate) {             super.oncreate(savedinstancestate);              viewpager = new viewpager(this);             viewpager.setid(r.id.pager);             setcontentview(viewpager);              final actionbar bar = getsupportactionbar();              bar.setnavigationmode(actionbar.navigation_mode_tabs);              //attaching tabs fragment classes , setting tab title.             tabsadapter = new tabsadapter(this, viewpager);             tabsadapter.addtab(bar.newtab().settext("fragmentclass1"),                     fragmentclass1.class, null);             tabsadapter.addtab(bar.newtab().settext("fragmentclass2"),               fragmentclass2.class, null);             tabsadapter.addtab(bar.newtab().settext("fragmentclass3"),               fragmentclass3.class, null);               if (savedinstancestate != null) {                 bar.setselectednavigationitem(savedinstancestate.getint("tab", 0));             }          }          @override         public boolean onoptionsitemselected(menuitem item) {              switch (item.getitemid()) {              case r.id.addtext:             **// here need call method exists in visible fragment class**                      return true;              }              return super.onoptionsitemselected(item);         }        @override      protected void onsaveinstancestate(bundle outstate) {       super.onsaveinstancestate(outstate);             outstate.putint("tab", getsupportactionbar().getselectednavigationindex());       }       public static class tabsadapter extends fragmentpageradapter       implements actionbar.tablistener, viewpager.onpagechangelistener {        private final context mcontext;             private final actionbar mactionbar;             private final viewpager mviewpager;             private final arraylist<tabinfo> mtabs = new arraylist<tabinfo>();              static final class tabinfo {                 private final class<?> clss;                 private final bundle args;                  tabinfo(class<?> _class, bundle _args) {                     clss = _class;                     args = _args;                 }             }        public tabsadapter(actionbaractivity activity, viewpager pager) {        super(activity.getsupportfragmentmanager());                 mcontext = activity;                 mactionbar = activity.getsupportactionbar();                 mviewpager = pager;                 mviewpager.setadapter(this);                 mviewpager.setonpagechangelistener(this);             }        public void addtab(actionbar.tab tab, class<?> clss, bundle args) {                 tabinfo info = new tabinfo(clss, args);                 tab.settag(info);                 tab.settablistener(this);                 mtabs.add(info);                 mactionbar.addtab(tab);                 notifydatasetchanged();              }        @override       public void onpagescrollstatechanged(int state) {        // todo auto-generated method stub        }        @override       public void onpagescrolled(int position, float positionoffset, int positionoffsetpixels) {        // todo auto-generated method stub        }        @override       public void onpageselected(int position) {        // todo auto-generated method stub        mactionbar.setselectednavigationitem(position);       }        @override       public void ontabreselected(tab tab, fragmenttransaction ft) {        // todo auto-generated method stub        }        @override       public void ontabselected(tab tab, fragmenttransaction ft) {        object tag = tab.gettag();                 (int i=0; i<mtabs.size(); i++) {                     if (mtabs.get(i) == tag) {                         mviewpager.setcurrentitem(i);                      }                 }                  tabposition = tab.getposition();       }        @override       public void ontabunselected(tab tab, fragmenttransaction ft) {        // todo auto-generated method stub        }        @override       public fragment getitem(int position) {        tabinfo info = mtabs.get(position);                 return fragment.instantiate(mcontext, info.clss.getname(), info.args);       }        @override       public int getcount() {        return mtabs.size();       }       }      } 

suppose below fragment class method updatelist() want call:

 public class fragmentclass1{      arraylist<string> originaldata;       @override          public view oncreateview(layoutinflater inflater, viewgroup container,            bundle savedinstancestate) {            view fragmentview = inflater.inflate(r.layout.frag1, container, false);            originaldata = getoriginaldatafromdb();            return fragmentview;           }       public void updatelist(string text)     {        originaldata.add(text);        //here other ui part need added     } } 

by selecting option, need update fragment visible.

a simple way of doing using trick related fragmentpageradapter implementation:

case r.id.addtext:      fragment page = getsupportfragmentmanager().findfragmentbytag("android:switcher:" + r.id.pager + ":" + viewpager.getcurrentitem());      // based on current position can cast page correct       // class , call method:      if (viewpager.getcurrentitem() == 0 && page != null) {           ((fragmentclass1)page).updatelist("new item");           }  return true; 

please rethink variable naming convention, using variable name name of class confusing(so no viewpager viewpager, use viewpager mpager example).


Comments

Popular posts from this blog

html - How to style widget with post count different than without post count -

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

javascript - storing input from prompt in array and displaying the array -