package com.dingmouren.dingdingmap.ui.welfare;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.dingmouren.dingdingmap.MyApplication;
import com.dingmouren.dingdingmap.api.ApiManager;
import com.dingmouren.dingdingmap.bean.GankResultWelfare;
import java.util.List;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Created by mouren on 2017/3/12.
*/
public class WelfarePresenter implements WelfareContract.Presenter<WelfareContract.View> {
public WelfareContract.View mView;
public StaggeredGridLayoutManager mLayoutManager;
public RecyclerView mRecycler;
private int mPage = 1;
private boolean isSlidingToLast = false;
public WelfarePresenter(WelfareContract.View view){
this.mView = view;
mLayoutManager = mView.getLayoutManager();
mRecycler = mView.getRecyclerView();
}
@Override
public void requestData() {
mView.setDataRefresh(true);
ApiManager.getApiInstance().getApiService().getGirlPics(mPage)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(listGankResult -> displayData(listGankResult.results),this::loadError);
}
private void loadError(Throwable throwable) {
throwable.printStackTrace();
mPage--;
mView.setDataRefresh(false);
Toast.makeText(MyApplication.applicationContext,"请检查网络设置",Toast.LENGTH_SHORT).show();
}
public void initPage(){
mPage = 1;
}
public void displayData(List<GankResultWelfare> list) {
mView.setData(list);
}
/**
* 滑动到底部的监听
*/
public void addScrollerListener(){
mRecycler.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE){
//获取最后一个完全显示的ItemPosition
int[] lastVisiblePositions = mLayoutManager.findLastVisibleItemPositions(new int[mLayoutManager.getSpanCount()]);
int lastVisiblePosition = getMaxElem(lastVisiblePositions);
int totalItemCount = mLayoutManager.getItemCount();
//判断是否滑动到底部
if (lastVisiblePosition == (totalItemCount -1) && isSlidingToLast){
mPage++;
requestData();
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
Log.e("page","onScrolled:" + dy);
super.onScrolled(recyclerView, dx, dy);
//dx用来判断横向滑动方向 dy用来判断纵向滑动方向
if (dy > 0){
isSlidingToLast = true;//标记向下滑动
}else {
isSlidingToLast = false;
}
}
});
}
private int getMaxElem(int[] arr) {
int size = arr.length;
int maxVal = Integer.MIN_VALUE;
for (int i = 0; i < size; i++) {
if (arr[i]>maxVal)
maxVal = arr[i];
}
return maxVal;
}
}