/** * BaseFragment懒加载 */
public abstract class BaseFragment extends Fragment { public Context mContext; private View view = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.mContext = getActivity(); } // 一个View只能被 添加布局里面ViewPager一次 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (view == null) { view = createView(inflater, container, savedInstanceState); } else { // has parent ViewGroup parent = (ViewGroup) view.getParent(); if (parent != null) { parent.removeView(view); } } return view; } protected boolean isVisibleToUser; protected boolean isViewInitiated; protected boolean isDataInitiated; @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); isViewInitiated = true; prepareFetchData(); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); this.isVisibleToUser = isVisibleToUser; isViewInitiated = true; prepareFetchData(); } public boolean prepareFetchData() { return prepareFetchData(true); } public boolean prepareFetchData(boolean forceUpdate) { if (isVisibleToUser && isViewInitiated && (!isDataInitiated || forceUpdate)) { fetchData(); isDataInitiated = true; return true; } return false; } protected abstract View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState); public abstract void fetchData(); }
import android.os.Bundle; import android.support.annotation.Nullable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.github.chrisbanes.photoview.PhotoView; /** * Created by Administrator on 2017/3/20. */ public class MyFragment extends BaseFragment { private View view; private PhotoView photoView; private static final String IMAGE_URL = "img_url"; private String imageUrl; public static MyFragment newInstance(String imgUrl) { MyFragment fragment = new MyFragment(); Bundle args = new Bundle(); args.putString(IMAGE_URL, imgUrl); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { Log.d("MyFragment", "onCreate"); imageUrl = getArguments().getString(IMAGE_URL); Log.d("ViewDetailFragment", imageUrl); } } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.d("MyFragment", "onActivityCreated"); } @Override protected View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_item, container, false); initView(view); return view; } @Override public void fetchData() { if (imageUrl != null) { Glide.with(mContext) .load(imageUrl) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(photoView); } } private void initView(View view) { photoView = (PhotoView) view.findViewById(R.id.pv); } }
private void initData() { mImageURLS.add("http://n.sinaimg.cn/sports/2_img/upload/69e00db4/20170319/OYfU-fycnyhk9663845.jpg"); mImageURLS.add("http://n.sinaimg.cn/sports/2_img/upload/88598dbf/20170313/wrf0-fychttf9388083.jpg"); mImageURLS.add("http://n.sinaimg.cn/sports/2_img/upload/88598dbf/20170313/5MAs-fychhuq4227487.jpg"); mImageURLS.add("http://n.sinaimg.cn/sports/2_img/upload/88598dbf/20170313/ClUf-fychhvn8577021.jpg"); mImageURLS.add("http://n.sinaimg.cn/sports/2_img/upload/88598dbf/20170313/5Ukj-fychhus0993884.jpg"); ArrayList<MyFragment> myFragments = new ArrayList<>(); for (int i = 0; i < mImageURLS.size(); i++) { myFragments.add(MyFragment.newInstance(mImageURLS.get(i))); } MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), myFragments); viewPager.setAdapter(myFragmentPagerAdapter); } class MyFragmentPagerAdapter extends FragmentPagerAdapter { ArrayList<MyFragment> myFragments; public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<MyFragment> myFragments) { super(fm); this.myFragments = myFragments; } @Override public Fragment getItem(int position) { return myFragments.get(position); } @Override public int getCount() { return myFragments.size(); } }