BaseFragment懒加载Glide+PhotoView

/**
 * 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();
    }
}















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值