Android FragmentActivity How to refresh fragment when it become visible -
i'm developing application android , need implementing tabs
i need compatible android 2.2
started implement tabs dont know if best idea
what want basically:
i want open activity have tabs
in each of tab, want load content dinamicly, play store apk:
my main problem is:
i have created asynctask progressdialog each fragment load data , show on fragment, when fragment activity open, initialize tabs , makes load fragments @ same time.
i want load tab content when tab becomes visible, because user may want see 1 tab, no need other tabs
how should that? should use tabfragments or others methods?
my current tab activiy is:
public class tabs2 extends fragmentactivity implements ontabchangelistener, onpagechangelistener{ viewpageradapter pageadapter; private viewpager mviewpager; private tabhost mtabhost; private string interid; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // infla o layout setcontentview(r.layout.tablayout); mviewpager = (viewpager) findviewbyid(r.id.viewpager); // tab initialization initialisetabhost(); // fragments , viewpager initialization list<fragment> fragments = getfragments(); pageadapter = new viewpageradapter(getsupportfragmentmanager(), fragments); mviewpager.setadapter(pageadapter); mviewpager.setonpagechangelistener(tabs2.this); } // method add tabhost private static void addtab(tabs2 activity, tabhost tabhost, tabhost.tabspec tabspec) { tabspec.setcontent(activity.new mytabfactory(activity)); tabhost.addtab(tabspec); } // manages tab changes, synchronizing pages public void ontabchanged(string tag) { int pos = this.mtabhost.getcurrenttab(); this.mviewpager.setcurrentitem(pos); } // manages page changes, synchronizing tabs @override public void onpagescrolled(int arg0, float arg1, int arg2) { int pos = this.mviewpager.getcurrentitem(); this.mtabhost.setcurrenttab(pos); } @override public void onpagescrollstatechanged(int arg0) { } @override public void onpageselected(int arg0) { } private list<fragment> getfragments(){ list<fragment> flist = new arraylist<fragment>(); // put here fragments flist.add(fragment.instantiate(this, tabfragmenta.class.getname())); flist.add(fragment.instantiate(this, tabfragmentb.class.getname())); flist.add(fragment.instantiate(this, tabfragmentc.class.getname())); return flist; } // tabs creation private void initialisetabhost() { mtabhost = (tabhost) findviewbyid(android.r.id.tabhost); mtabhost.setup(); // put here tabs tabs2.addtab(this, this.mtabhost, this.mtabhost.newtabspec("tab1").setindicator("detalhes")); tabs2.addtab(this, this.mtabhost, this.mtabhost.newtabspec("tab2").setindicator("comentários")); tabs2.addtab(this, this.mtabhost, this.mtabhost.newtabspec("tab3").setindicator("cenas")); mtabhost.setontabchangedlistener(this); } // um simples factory que retorna view para o tabhost class mytabfactory implements tabcontentfactory { private final context mcontext; public mytabfactory(context context) { mcontext = context; } public view createtabcontent(string tag) { view v = new view(mcontext); v.setminimumwidth(0); v.setminimumheight(0); return v; } } }
the viewpageradatper:
public class viewpageradapter extends fragmentpageradapter { private list<fragment> mfragments; public viewpageradapter(fragmentmanager fm, list<fragment> fragments) { super(fm); mfragments = fragments; } @override public fragment getitem(int i) { return mfragments.get(i); } @override public int getcount() { return mfragments.size(); } }
the xml tabs activiy
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <tabhost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" > <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <tabwidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="35dp" android:orientation="horizontal" android:gravity="bottom" android:padding="0dip" /> <framelayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0" /> <android.support.v4.view.viewpager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="fill_parent" android:isscrollcontainer="true" android:scrollbars="vertical" /> </linearlayout> </tabhost> for each tab used fragments
public class tabfragmenta extends fragment { @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { if (container == null) { return null; } // here call asynctask , return data layout return (relativelayout) inflater.inflate(r.layout.layout_a, container, false); } }
since using viewpager how viewpager works , reason. view pager default loads previous, current , next tab content ready when user gets tab. cannot change viewpager load 1 page @ time.
if notice how play store works
Comments
Post a Comment