package com.werb.gankwithzhihu.ui.presenter; import android.content.Context; import android.os.Handler; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.Toast; import com.werb.gankwithzhihu.R; import com.werb.gankwithzhihu.bean.gank.Gank; import com.werb.gankwithzhihu.bean.gank.Meizhi; import com.werb.gankwithzhihu.bean.gank.Video; import com.werb.gankwithzhihu.ui.adapter.GankListAdapter; import com.werb.gankwithzhihu.ui.base.BasePresenter; import com.werb.gankwithzhihu.ui.view.IGankFgView; import com.werb.gankwithzhihu.util.DateUtils; import java.util.Date; import java.util.List; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by Werb on 2016/8/18. * Werb is Wanbo. * Contact Me : werbhelius@gmail.com */ public class GankFgPresenter extends BasePresenter<IGankFgView> { private Context context; private IGankFgView gankFgView; private RecyclerView mRecyclerView; private GridLayoutManager layoutManager; private GankListAdapter adapter; private List<Gank> list; private int page = 1; private int lastVisibleItem; private boolean isLoadMore = false; // 是否加载过更多 public GankFgPresenter(Context context) { this.context = context; } public void getGankData() { gankFgView = getView(); if (gankFgView != null) { mRecyclerView = gankFgView.getRecyclerView(); layoutManager = gankFgView.getLayoutManager(); if(isLoadMore){ page = page + 1; } Observable.zip(gankApi.getMeizhiData(page), gankApi.getVideoData(page), this::creatDesc) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(meizhi1 -> { displayMeizhi(context, meizhi1.getResults(), gankFgView, mRecyclerView); },this::loadError); } } private void loadError(Throwable throwable) { throwable.printStackTrace(); gankFgView.setDataRefresh(false); Toast.makeText(context, R.string.load_error, Toast.LENGTH_SHORT).show(); } private void displayMeizhi(Context context, List<Gank> meiZhiList, IGankFgView gankFgView, RecyclerView recyclerView) { if (isLoadMore) { if (meiZhiList == null) { gankFgView.setDataRefresh(false); return; } else { list.addAll(meiZhiList); } adapter.notifyDataSetChanged(); } else { list = meiZhiList; adapter = new GankListAdapter(context, list); recyclerView.setAdapter(adapter); adapter.notifyDataSetChanged(); } gankFgView.setDataRefresh(false); } public void scrollRecycleView() { mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if (newState == RecyclerView.SCROLL_STATE_IDLE) { lastVisibleItem = layoutManager .findLastVisibleItemPosition(); if (layoutManager.getItemCount() == 1) { return; } if (lastVisibleItem + 1 == layoutManager .getItemCount()) { gankFgView.setDataRefresh(true); isLoadMore = true; new Handler().postDelayed(() -> getGankData(), 1000); } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = layoutManager.findLastVisibleItemPosition(); } }); } /** * MeiZhi = list , gankmeizhi = 福利 * * @param meizhi list * @param video list * @return */ private Meizhi creatDesc(Meizhi meizhi, Video video) { for (Gank gankmeizhi : meizhi.getResults()) { gankmeizhi.desc = gankmeizhi.desc + " " + getVideoDesc(gankmeizhi.getPublishedAt(), video.getResults()); } return meizhi; } //匹配同一天的福利描述和视频描述 private String getVideoDesc(Date publishedAt, List<Gank> results) { String videoDesc = ""; for (int i = 0; i < results.size(); i++) { Gank video = results.get(i); if (video.getPublishedAt() == null) video.setPublishedAt(video.getCreatedAt()); if (DateUtils.isSameDate(publishedAt, video.getPublishedAt())) { videoDesc = video.getDesc(); break; } } return videoDesc; } }