ViewPager+Fragment delay loading

 Article source: http://blog.csdn.net/maosidiaoxian/article/details/38300627

 

package com.ywj.fragmentutil;

import android.support.v4.app.Fragment;
import android.util.Log;

/**
 * ViewPager 的预加载是有好处的,可以减少卡顿.我们要的不是阻止view的预加载,而是数据的预加载.
 * 
 * @author ywj
 * 
 */
public abstract class LazyLoadFragment extends Fragment {
	boolean mHasLoadedOnce = false;// 是否加载过一次
	boolean mIsVisiable = false;// 是否可见
	boolean mIsPrepared = false;// view是否加载完成,是否可以加载数据了

	@Override
	public void setUserVisibleHint(boolean isVisibleToUser) {
		super.setUserVisibleHint(isVisibleToUser);
		if (isVisibleToUser) {
			mIsVisiable = true;
			onVisiable();
		} else {
			mIsVisiable = false;
			onInvisiable();
		}
	}

	public void onVisiable() {
		lazyLoad();
	}

	public void onInvisiable() {
	}

	protected abstract void lazyLoad();

	@Override
	public void onDestroy() {
		super.onDestroy();
		Log.i("aaa", "on destroy");
	}
}

package com.ywj.fragmentutil;

import com.zhy.tree_view.R;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Frg1 extends LazyLoadFragment {

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.frg_common, container,false);//注意此处的false,表示把frg_common视图加载到fragment,返回的view会添加到fragment的根视图里面,如果设置为true,会报错.因为返回true,就是已经加到Fragment的根视图.
		mIsPrepared = true;//设置视图加载已经准备好
		lazyLoad();//调用延迟加载的方法.
		return view;
	}

	@Override
	protected void lazyLoad() {
		 if(!mIsPrepared || !mIsVisiable || mHasLoadedOnce) {  
	            return;  //fragment的视图未加载完成 或者 fragment不可见 或者 数据加载过一次,就不再进行数据的加载,直接返回.
	        }  
	        //填充各控件的数据,此处模拟耗时操作  
		final ProgressDialog dialog = new ProgressDialog(getActivity());
		dialog.show();
		new Thread(new Runnable() {

			@Override
			public void run() {
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				dialog.dismiss();
			}
		}).start();
	
		mHasLoadedOnce = true;//加载完数据,记得设置 是否加载一次的标记位为true.
	}

}


package com.ywj.fragmentutil;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class ContactPagerAdapter extends FragmentPagerAdapter{
	List<String> titles;
	List<Fragment> fragments;

	public ContactPagerAdapter(FragmentManager fm,List<String> titles, List<Fragment> fragments) {
		super(fm);
		this.titles = titles;
		this.fragments = fragments;
	}

	@Override
	public Fragment getItem(int arg0) {
		return fragments.get(arg0);
	}

	@Override
	public int getCount() {
		return fragments.size();
	}

	@Override  
    public CharSequence getPageTitle(int position)  
    {  
        return titles.get(position);  
    }  
}


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <android.support.v4.view.ViewPager
        android:id="@+id/vp_contact"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </android.support.v4.view.ViewPager>

</LinearLayout>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>


 

 

 







Guess you like

Origin blog.csdn.net/u012049463/article/details/53821466