由于之前的一个电商项目,布局上ScrollView嵌套一个RecycleView比较方便实现,但是由于嵌套的冲突,所以需要自定义一个layouManager,才能显示全部recycleView。但是recycleView上拉冲突就出问题了。
所以对ScrollView设置一个监听器实现。
此处用的是Adapter是用的明宇大大的Brvah,链接奉上:
http://www.jianshu.com/p/b343fcff51b0
直接贴代码:
package com.cdmhzx.gankiorx.fragment;
import android.os.Bundle;
import android.support.v4.widget.NestedScrollView;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
import com.cdmhzx.gankiorx.Presenter.HomePresenter;
import com.cdmhzx.gankiorx.Presenter.ScrollPresenter;
import com.cdmhzx.gankiorx.R;
import com.cdmhzx.gankiorx.View.IScrollView;
import com.cdmhzx.gankiorx.View.MyGridLayoumanager;
import com.cdmhzx.gankiorx.bean.AllBean;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
/**
* Created by lizz on 2017/6/29.
*/
public class ScrollFragment extends BaseLazyFragment implements IScrollView{
@BindView(R.id.scrollView)
NestedScrollView mScrollView;
@BindView(R.id.rv)
RecyclerView mRecyclerView;
@BindView(R.id.srl)
SwipeRefreshLayout mSwipeRefreshLayout;
private List<AllBean.ResultsBean> mResultsBeen;
ScrollPresenter mScrollPresenter;
private int mCurrentPage = 1;
private HomeAdapter mAdapter;
private boolean isLoading = false;
@Override
protected void lazeLoadData() {
getList(10,mCurrentPage);
Log.e("DDD","加载数据开始");
}
@Override
protected void createFragment(Bundle savedInstanceState) {
}
@Override
protected void initView() {
mScrollPresenter = new ScrollPresenter();
mScrollPresenter.attachView(this);
if (mResultsBeen==null)
mResultsBeen = new ArrayList<>();
mRecyclerView.setLayoutManager(new MyGridLayoumanager(mActivity,2));
mAdapter = new HomeAdapter(R.layout.item_home, mResultsBeen, HomeAdapter.TYPE1);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setNestedScrollingEnabled(false);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mCurrentPage = 1;
getList(10,mCurrentPage);
}
});
mScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
// getScrollY()是滚动条距离页面顶端的距离
// getMeasuredHeight()是屏幕顶端距离页面顶端的距离
// getHeight()是屏幕高度
int y = mScrollView.getScrollY();
if (isLoading){
return false;
}
if (y<=0){
/**顶部*/
}else if (mScrollView.getChildAt(0).getMeasuredHeight()<=y+mScrollView.getHeight()){
if (!isLoading){
getList(10,mCurrentPage);
isLoading = true;
}
}
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
}
@Override
protected int bindLayout() {
return R.layout.fragment_scroll;
}
@Override
public void showLoadingDialog() {
}
@Override
public void cancelLoadingDialog() {
}
@Override
public void showErrorMsg(String errorMsg) {
}
@Override
public void getList(int pageSize, int currentPage) {
mScrollPresenter.getList(pageSize,currentPage);
mCurrentPage++;
}
@Override
public void onRefreshData(List<AllBean.ResultsBean> resultsBeen) {
Log.e("DDD","刷新数据");
mResultsBeen.clear();
mResultsBeen.addAll(resultsBeen);
mAdapter.setNewData(mResultsBeen);
Log.e("DDD",mResultsBeen.size()+"");
mSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onLoadMoreData(List<AllBean.ResultsBean> resultsBeen) {
Log.e("DDD","加载更多数据");
mResultsBeen.addAll(resultsBeen);
mAdapter.notifyDataSetChanged();
isLoading = false;
}
}