package com.example.jingbin.cloudreader.ui.book.child; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import com.example.jingbin.cloudreader.MainActivity; import com.example.jingbin.cloudreader.R; import com.example.jingbin.cloudreader.adapter.BookAdapter; import com.example.jingbin.cloudreader.base.BaseFragment; import com.example.jingbin.cloudreader.bean.book.BookBean; import com.example.jingbin.cloudreader.databinding.FragmentBookCustomBinding; import com.example.jingbin.cloudreader.http.HttpClient; import com.example.jingbin.cloudreader.utils.CommonUtils; import com.example.jingbin.cloudreader.utils.DebugUtil; import rx.Observer; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class BookCustomFragment extends BaseFragment<FragmentBookCustomBinding> { private static final String TYPE = "param1"; private String mType = "综合"; private boolean mIsPrepared; private boolean mIsFirst = true; // 开始请求的角标 private int mStart = 0; // 一次请求的数量 private int mCount = 18; private MainActivity activity; private BookAdapter mBookAdapter; private GridLayoutManager mLayoutManager; @Override public int setContent() { return R.layout.fragment_book_custom; } @Override public void onAttach(Context context) { super.onAttach(context); activity = (MainActivity) context; } public static BookCustomFragment newInstance(String param1) { BookCustomFragment fragment = new BookCustomFragment(); Bundle args = new Bundle(); args.putString(TYPE, param1); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mType = getArguments().getString(TYPE); } } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); showContentView(); bindingView.srlBook.setColorSchemeColors(CommonUtils.getColor(R.color.colorTheme)); bindingView.srlBook.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { DebugUtil.error("-----onRefresh"); // listTag= Arrays.asList(BookApiUtils.getApiTag(position)); // String tag=BookApiUtils.getRandomTAG(listTag); // doubanBookPresenter.searchBookByTag(BookReadingFragment.this,tag,false); bindingView.srlBook.postDelayed(new Runnable() { @Override public void run() { mStart = 0; loadCustomData(); } }, 1000); } }); // mBookAdapter = new BookAdapter(getActivity()); // mLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); mLayoutManager = new GridLayoutManager(getActivity(), 3); bindingView.xrvBook.setLayoutManager(mLayoutManager); // bindingView.xrvBook.setAdapter(mBookAdapter); scrollRecycleView(); // 准备就绪 mIsPrepared = true; /** * 因为启动时先走loadData()再走onActivityCreated, * 所以此处要额外调用load(),不然最初不会加载内容 */ loadData(); } @Override protected void loadData() { DebugUtil.error("-----loadData"); if (!mIsPrepared || !mIsVisible || !mIsFirst) { return; } bindingView.srlBook.setRefreshing(true); bindingView.srlBook.postDelayed(new Runnable() { @Override public void run() { loadCustomData(); } }, 500); DebugUtil.error("-----setRefreshing"); } private void loadCustomData() { Subscription get = HttpClient.Builder.getDouBanService().getBook(mType, mStart, mCount) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<BookBean>() { @Override public void onCompleted() { showContentView(); if (bindingView.srlBook.isRefreshing()) { bindingView.srlBook.setRefreshing(false); } } @Override public void onError(Throwable e) { showContentView(); if (bindingView.srlBook.isRefreshing()) { bindingView.srlBook.setRefreshing(false); } if (mStart == 0) { showError(); } } @Override public void onNext(BookBean bookBean) { if (mStart == 0) { if (bookBean != null && bookBean.getBooks() != null && bookBean.getBooks().size() > 0) { if (mBookAdapter == null) { mBookAdapter = new BookAdapter(getActivity()); } mBookAdapter.setList(bookBean.getBooks()); mBookAdapter.notifyDataSetChanged(); bindingView.xrvBook.setAdapter(mBookAdapter); // //构造器中,第一个参数表示列数或者行数,第二个参数表示滑动方向,瀑布流 // bindingView.xrvBook.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL)); // bindingView.xrvBook.setAdapter(mBookAdapter); // bindingView.xrvBook.setPullRefreshEnabled(false); // bindingView.xrvBook.setLoadingMoreEnabled(true); } mIsFirst = false; } else { mBookAdapter.addAll(bookBean.getBooks()); mBookAdapter.notifyDataSetChanged(); } if (mBookAdapter != null) { mBookAdapter.updateLoadStatus(BookAdapter.LOAD_PULL_TO); } } }); addSubscription(get); } public void scrollRecycleView() { bindingView.xrvBook.addOnScrollListener(new RecyclerView.OnScrollListener() { int lastVisibleItem; @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == RecyclerView.SCROLL_STATE_IDLE) { lastVisibleItem = mLayoutManager.findLastVisibleItemPosition(); /**StaggeredGridLayoutManager*/ // int[] into = new int[(mLayoutManager).getSpanCount()]; // lastVisibleItem = findMax(mLayoutManager.findLastVisibleItemPositions(into)); if (mBookAdapter == null) { return; } if (mLayoutManager.getItemCount() == 0) { mBookAdapter.updateLoadStatus(BookAdapter.LOAD_NONE); return; } if (lastVisibleItem + 1 == mLayoutManager.getItemCount() && mBookAdapter.getLoadStatus() != BookAdapter.LOAD_MORE) { // mBookAdapter.updateLoadStatus(BookAdapter.LOAD_PULL_TO); // isLoadMore = true; mBookAdapter.updateLoadStatus(BookAdapter.LOAD_MORE); //new Handler().postDelayed(() -> getBeforeNews(time), 1000); new Handler().postDelayed(new Runnable() { @Override public void run() { // String tag= BookApiUtils.getRandomTAG(listTag); // doubanBookPresenter.searchBookByTag(BookReadingFragment.this,tag,true); mStart += mCount; loadCustomData(); } }, 1000); } } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); lastVisibleItem = mLayoutManager.findLastVisibleItemPosition(); /**StaggeredGridLayoutManager*/ // int[] into = new int[(mLayoutManager).getSpanCount()]; // lastVisibleItem = findMax(mLayoutManager.findLastVisibleItemPositions(into)); } }); } private int findMax(int[] lastPositions) { int max = lastPositions[0]; for (int value : lastPositions) { if (value > max) { max = value; } } return max; } @Override protected void onRefresh() { bindingView.srlBook.setRefreshing(true); loadCustomData(); } }