package com.wheat7.cashew.fragment; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import android.view.View; import android.widget.Toast; import com.wheat7.cashew.R; import com.wheat7.cashew.activity.InfoActivity; import com.wheat7.cashew.base.BaseFragment; import com.wheat7.cashew.databinding.FragmentGirlBinding; import com.wheat7.cashew.http.ApiException; import com.wheat7.cashew.http.ApiService; import com.wheat7.cashew.model.BaseRes; import com.wheat7.cashew.model.Gank; import com.wheat7.cashew.recycler.GirlRecyclerAdapter; import com.wheat7.cashew.recycler.LoadMoreRecyclerOnScrollListener; import java.util.List; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by wheat7 on 2017/8/22. */ public class GirlFragment extends BaseFragment<FragmentGirlBinding> implements SwipeRefreshLayout.OnRefreshListener { private GirlRecyclerAdapter mAdapter; private int mCurrentPage; @Override public int getLayoutId() { return R.layout.fragment_girl; } @Override public void initView(Bundle savedInstanceState) { getBinding().setFrag(this); getBinding().swipeRefreshGirl.setColorSchemeColors(Color.parseColor("#515151")); mAdapter = new GirlRecyclerAdapter(getActivity()); getBinding().recyclerGirl.setAdapter(mAdapter); StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); getBinding().recyclerGirl.setLayoutManager(staggeredGridLayoutManager); getBinding().recyclerGirl.setOnScrollListener(new LoadMoreRecyclerOnScrollListener(staggeredGridLayoutManager) { @Override public void onLoadMore(int current_page) { mCurrentPage = current_page; loadMore(current_page); } }); getBinding().swipeRefreshGirl.setOnRefreshListener(this); getBinding().swipeRefreshGirl.setRefreshing(true); onRefresh(); } @Override public void onRefresh() { String baseUrl = "http://gank.io/api/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); apiService.getClassifyData("福利", 1) .map(new BaseResFunc<List<Gank>>()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(mObserver); } Observer<List<Gank>> mObserver = new Observer<List<Gank>>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull List<Gank> gankClassifies) { Log.d("GANK", "on next"); if (gankClassifies != null && gankClassifies.size() != 0) { mAdapter.setDataList(gankClassifies); } else { } } @Override public void onError(@NonNull Throwable e) { Log.d("GANK", e.getMessage()); getBinding().swipeRefreshGirl.setRefreshing(false); if (mAdapter.getRealCount() == 0) { getBinding().viewError.setVisibility(View.VISIBLE); getBinding().viewError.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onRefresh(); getBinding().swipeRefreshGirl.setRefreshing(true); } }); } else { Toast.makeText(getActivity(), "刷新失败,请检查网络重试", Toast.LENGTH_SHORT).show(); } } @Override public void onComplete() { getBinding().swipeRefreshGirl.setRefreshing(false); getBinding().viewError.setVisibility(View.GONE); } }; private class BaseResFunc<T> implements io.reactivex.functions.Function<BaseRes<T>, T> { @Override public T apply(@NonNull BaseRes<T> tBaseRes) throws Exception { if (tBaseRes.isError() == true) { throw new ApiException("请求错误!"); } return tBaseRes.getResults(); } } public void loadMore(int currentPage) { String baseUrl = "http://gank.io/api/"; Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); apiService.getClassifyData("福利", currentPage) .map(new BaseResFunc<List<Gank>>()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(mLoadMoreObserver); } Observer<List<Gank>> mLoadMoreObserver = new Observer<List<Gank>>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull List<Gank> gankClassifies) { if (gankClassifies != null && gankClassifies.size() != 0) { mAdapter.addMoreItem(gankClassifies); mAdapter.setIsLoading(); } else { mAdapter.setOnNoLoadMore(); } } @Override public void onError(@NonNull Throwable e) { mAdapter.setNetError(); mAdapter.setOnReloadClickListener(new GirlRecyclerAdapter.OnReloadClickListener() { @Override public void onClick() { mAdapter.setIsLoading(); loadMore(mCurrentPage); } }); } @Override public void onComplete() { getBinding().swipeRefreshGirl.setRefreshing(false); } }; /** * About click */ public void onGirlInfoClick() { Intent intent = new Intent(getActivity(), InfoActivity.class); startActivity(intent); } }