package com.pedaily.yc.ycstatelayout.fragment; import android.annotation.SuppressLint; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.OrientationHelper; import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import com.ns.yc.ycstatelib.StateLayoutManager; import com.ns.yc.ycstatelib.StateViewLayout; import com.pedaily.yc.ycstatelayout.BuildConfig; import com.pedaily.yc.ycstatelayout.R; import com.pedaily.yc.ycstatelayout.adapter.Constants; import com.pedaily.yc.ycstatelayout.adapter.GlobalAdapter; import com.pedaily.yc.ycstatelayout.base.BaseStateFragment; import java.util.ArrayList; import java.util.List; import static com.pedaily.yc.ycstatelayout.adapter.Util.getErrorImage; import static com.pedaily.yc.ycstatelayout.adapter.Util.getRandomImage; public class Test3Fragment extends BaseStateFragment { private static final int LOADING = 1; private static final int CONTENT = 2; private List<String> lists = new ArrayList<>(); private RecyclerAdapter adapter; private int size; @SuppressLint("HandlerLeak") private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case LOADING: showLoading(); break; case CONTENT: showContent(); break; default: break; } } }; @Override public void onDestroy() { super.onDestroy(); if (handler!=null){ handler.removeCallbacksAndMessages(null); handler = null; } } @Override protected void initStatusLayout() { statusLayoutManager = StateLayoutManager.newBuilder(activity,true) .contentView(R.layout.base_recycler_view) .build(); showContent(); StateViewLayout.debug(BuildConfig.DEBUG); StateViewLayout.initDefault(new GlobalAdapter()); DisplayMetrics dm = getResources().getDisplayMetrics(); size = dm.widthPixels >> 1; } @Override public void initView(View view) { RecyclerView recyclerView = view.findViewById(R.id.recycleView); GridLayoutManager layoutManager = new GridLayoutManager(activity, 2); layoutManager.setOrientation(OrientationHelper.VERTICAL); recyclerView.setLayoutManager(layoutManager); recyclerView.addItemDecoration(new DividerItemDecoration(activity, DividerItemDecoration.VERTICAL)); recyclerView.setItemAnimator(new DefaultItemAnimator()); adapter = new RecyclerAdapter(initData()); recyclerView.setAdapter(adapter); } @Override public void initListener() { } private List<String> initData() { int size = 20; List<String> list = new ArrayList<>(size + 4); list.add(""); list.add(getRandomImage()); list.add(getRandomImage()); list.add(getErrorImage()); for (int i = 0; i < size; i++) { list.add(getRandomImage()); } return list; } class RecyclerAdapter extends RecyclerView.Adapter<ViewHolder> { List<String> list; RecyclerAdapter(List<String> list) { this.list = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ImageView imageView = new ImageView(parent.getContext()); imageView.setLayoutParams(new ViewGroup.LayoutParams(size,size)); StateViewLayout.Holder holder = StateViewLayout.getDefault().wrap(imageView); holder.withData(Constants.HIDE_LOADING_STATUS_MSG); return new ViewHolder(holder, imageView); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.showImage(list.get(position)); } @Override public int getItemCount() { return list.size(); } } class ViewHolder extends RecyclerView.ViewHolder implements Runnable { private StateViewLayout.Holder holder; ImageView imageView; private String curUrl; ViewHolder(StateViewLayout.Holder holder, ImageView imageView) { super(holder.getWrapper()); this.imageView = imageView; this.holder = holder; this.holder.withRetry(this); } void showImage(String url) { curUrl = url; holder.showLoading(); Glide.with(activity) .load(url) .listener(new RequestListener<Drawable>() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { holder.showLoadFailed(); return false; } @Override public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, com.bumptech.glide.load.DataSource dataSource, boolean isFirstResource) { holder.showLoadSuccess(); return false; } }) .into(imageView); } @Override public void run() { showImage(curUrl); } } @Override protected void loadData() { } }