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>