The company app uses Viewpager to load fragment: Each Viewpager page is a fragment,fragment content from the Web, and the function to be implemented is when switching between different pages of Viewpager, can display the page that has been loaded smoothly.
The implementation of the method is very simple answer. Because Viewpager has the ability to cache.
Mviewpager.setoffscreenpagelimit (6);
You can do this by simply adding this sentence: for fragment that have already been loaded, any event of that fragment will not be triggered when it is switched. It can be displayed normally when switching back.
It is important to note that the function of this sentence is to set the number of pre-cached fragment (or other view). If the set number is too large, the fragment that is not displayed when you load the current fragment will cause the current page to load too slowly. So this number should choose the appropriate value.
More Content Blog Links: http://blog.csdn.net/zhouzme/article/details/19707677
- Package com.cosmosource.mbi.fragment;
- Import java.util.ArrayList;
- Import java.util.List;
- Import Cn.jiabeis.andr.log.CommonLog;
- Import Cn.jiabeis.andr.log.LogFactory;
- Import com.cosmosource.mbi.MainActivity;
- Import COM.COSMOSOURCE.MBI.R;
- Import Com.cosmosource.mbi.adapter.TabPagerAdapter;
- Import Com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
- Import Android.os.Bundle;
- Import Android.os.Handler;
- Import android.support.v4.app.Fragment;
- Import Android.support.v4.view.PagerAdapter;
- Import Android.support.v4.view.ViewPager;
- Import Android.support.v4.view.ViewPager.OnPageChangeListener;
- Import Android.view.LayoutInflater;
- Import Android.view.View;
- Import Android.view.ViewGroup;
- Import android.view.ViewParent;
- /**
- * @description Viewerpager's Fragment
- * @author Herb
- * @version 0.1
- * @since 2013-11-18 10:29:37
- */
- public class Viewpagerfragment extends commonfragment{
- Private static final Commonlog log = Logfactory.createlog ();
- /**
- * References to Viewpager objects
- */
- Public Viewpager Mviewpager;
- /**
- * Loading fragment containers, each of our interfaces is a fragment
- */
- Private list<fragment> mfragmentlist = new arraylist<fragment> ();
- /**
- * Used to record fragment that have been browsed, no longer loading from the Web, because the Viewpager cache function when switching fragemnt
- * Does not trigger any events for fragment. Can be saved in full.
- * JKX
- */
- Private list<fragment> browsedfragmentlist = new arraylist<fragment> ();
- Private Tabpageradapter TPA = null;
- Public list<fragment> getmfragmentlist () {
- return mfragmentlist;
- }
- public void Setmfragmentlist (list<fragment> mfragmentlist) {
- This.mfragmentlist = mfragmentlist;
- }
- @Override
- public void OnCreate (Bundle savedinstancestate) {
- Super.oncreate (savedinstancestate);
- }
- @Override
- Public View Oncreateview (layoutinflater inflater, ViewGroup container,
- Bundle savedinstancestate) {
- if (mview==null) {
- MView = inflater.inflate (r.layout.frame_viewpager_layout, NULL);
- Mviewpager = (Viewpager) Mview.findviewbyid (R.id.viewpager);
- Setting up Monitoring
- Mviewpager.setonpagechangelistener (New Mysetonpagechangelistener ());
- Cache multiple sub-pages, pre-cache 16 menu items
- Mviewpager.setoffscreenpagelimit (15);
- /* Resolution: Java.lang.IllegalStateException:Recursive entry to executependingtransaction*/
- New Handler (). postdelayed (New Runnable () {
- @Override
- public void Run () {
- TPA = new Tabpageradapter (Getfragmentmanager (), mfragmentlist);
- Mviewpager.setadapter (TPA);
- Mviewpager.setcurrentitem (0);
- /* Load url*/here
- if (null! = Mfragmentlist && mfragmentlist.size () > 0) {
- There are multiple secondary navigation, the default display of the No. 0 navigation corresponding to the fragment
- Fragment ff = mfragmentlist.get (0);
- if (null! = FF && ff instanceof webviewfragment) {
- ((webviewfragment) FF). Cusloadurl ();
- }
- }
- }
- }, 10);
- }else{
- System.out.println ("Viewpagerfragment:mview is not empty, re-use");
- }
- return mView;
- }
- @Override
- public void onactivitycreated (Bundle savedinstancestate) {
- Super.onactivitycreated (savedinstancestate);
- Setupviews ();
- }
- private void Setupviews () {
- }
- @Override
- public void OnDestroy () {
- Super.ondestroy ();
- }
- @Override
- public void Ondestroyview () {
- TODO auto-generated Method Stub
- Super.ondestroyview ();
- if (Null!=mview) {
- ((ViewGroup) mview.getparent ()). Removeview (MView);
- }
- }
- /**
- * Viewpager page tab Toggle Listener
- */
- Class Mysetonpagechangelistener implements Onpagechangelistener
- {
- public void onpagescrollstatechanged (int arg0) {
- }
- public void onpagescrolled (int arg0, float arg1, int arg2) {
- }
- public void onpageselected (int position) {
- Fragment ff = mfragmentlist.get (position);
- /**
- * determine if it has been browsed, and if not, reload it from the web.
- * JKX
- */
- if (!isbrowsered (FF)) {
- if (null! = FF && ff instanceof webviewfragment) {
- ((webviewfragment) FF). Cusloadurl ();
- }
- Browsedfragmentlist.add (FF);
- System.out.println ("Number of pages loaded:" +browsedfragmentlist.size ());
- }
- Mainactivity ma = (mainactivity) getactivity ();
- if (null! = MA) {
- Ma.getsupportactionbar (). Setselectednavigationitem (position);
- int last = Mviewpager.getchildcount ()-1;
- if (position = = Last | | position = = 0) {
- Ma.getslidingmenu (). Settouchmodeabove (Slidingmenu.touchmode_margin);
- } else {
- Ma.getslidingmenu (). Settouchmodeabove (Slidingmenu.touchmode_none);
- }
- }
- }
- }
- /**
- * Determine if the fragment has been browsed.
- * @param fragment
- * @return
- * JKX
- */
- public boolean isbrowsered (Fragment Fragment) {
- if (Browsedfragmentlist.contains (fragment)) {
- return true;
- }else{
- return false;
- }
- }
- }
Lazy Loading of Fragment+viewpager