package com.pan.simplepicture.view.fragment;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.View;
import com.pan.simplepicture.R;
import com.pan.simplepicture.adapter.BaseRecyclerAdapter;
import com.pan.simplepicture.bean.Lz13;
import com.pan.simplepicture.inter.LoadingState;
import com.pan.simplepicture.inter.OnRetryListener;
import com.pan.simplepicture.presenter.ArticleFragmentPresenter;
import com.pan.simplepicture.presenter.PicturePresenter;
import com.pan.simplepicture.utils.NetWorkUtil;
import com.pan.simplepicture.view.holder.ArticleHolder;
import com.pan.simplepicture.view.impl.IArticleFragmentView;
import com.pan.simplepicture.widget.LoadingView;
import java.util.List;
import java.util.TreeMap;
import butterknife.Bind;
public class ArticleFragment extends BaseFragment implements IArticleFragmentView, SwipeRefreshLayout.OnRefreshListener {
@Bind(R.id.recycler_view)
public RecyclerView mRecyclerView;
private BaseRecyclerAdapter mAdapter;
private boolean canLoadMore = true;
@Override
public void setAdapter(List<Lz13> list) {
if (mRecyclerView == null) return;
pageNo = list.size();
if (pageNo < pageSize)
canLoadMore = false;
if (mAdapter == null) {
mAdapter = new BaseRecyclerAdapter(list, R.layout.fragment_text_item, ArticleHolder.class);
mRecyclerView.setAdapter(mAdapter);
} else {
if ((mAdapter.getItem(0) == null) && (list.size() == 0))
return;
if ((mAdapter.getItem(0) == null) || (list.size() == 0) || (!((Lz13) mAdapter.getItem(0)).href.equals(list.get(0).href)))
mAdapter.setmDatas(list);
}
}
@Override
public void loadMore(List<Lz13> list) {
if (mRecyclerView != null && mAdapter != null && list != null) {
if (list.size() < pageSize)
canLoadMore = false;
if (list.size() <= 0) {
return;
}
mAdapter.addAll(list);
pageNo += list.size();
}
}
@Override
public void onRefreshComplete() {
if (mSwipeRefreshLayout != null && mSwipeRefreshLayout.isRefreshing())
mSwipeRefreshLayout.setRefreshing(false);
}
public void onLoadMoreComplete() {
isLoadingMore = false;
}
@Override
public ArticleFragmentPresenter getPresenter() {
return new ArticleFragmentPresenter();
}
private LinearLayoutManager mLayoutManager;
@Bind(R.id.swipe_refresh_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
@Bind(R.id.fl_loading)
LoadingView fl_loading;
@Override
public void showSuccess() {
fl_loading.setVisibility(View.GONE);
mSwipeRefreshLayout.setVisibility(View.VISIBLE);
}
@Override
public void showEmpty() {
mSwipeRefreshLayout.setVisibility(View.GONE);
fl_loading.setVisibility(View.VISIBLE);
fl_loading.setState(LoadingState.STATE_EMPTY);
}
@Override
public boolean checkNet() {
return NetWorkUtil.isNetWorkConnected(mContext);
}
@Override
public void showFaild() {
mSwipeRefreshLayout.setVisibility(View.GONE);
fl_loading.setVisibility(View.VISIBLE);
fl_loading.setState(LoadingState.STATE_ERROR);
}
@Override
public void showNoNet() {
mSwipeRefreshLayout.setVisibility(View.GONE);
fl_loading.setVisibility(View.VISIBLE);
fl_loading.setState(LoadingState.STATE_NO_NET);
}
private String mResId;
public void setHref(String mResId) {
this.mResId = mResId;
}
@Override
public void bindView(Bundle savedInstanceState) {
if (TextUtils.isEmpty(mResId) || mPresenter == null || !(mPresenter instanceof ArticleFragmentPresenter)) {
return;
}
fl_loading.withLoadedEmptyText("≥﹏≤ , 连条毛都没有 !").withEmptyIco(R.drawable.note_empty).withBtnEmptyEnnable(false)
.withErrorIco(R.drawable.ic_chat_empty).withLoadedErrorText("(῀( ˙᷄ỏ˙᷅ )῀)ᵒᵐᵍᵎᵎᵎ,我家程序猿跑路了 !").withbtnErrorText("去找回她!!!")
.withLoadedNoNetText("你挡着信号啦o( ̄ヘ ̄o)☞ᗒᗒ 你走").withNoNetIco(R.drawable.ic_chat_empty).withbtnNoNetText("网弄好了,重试")
.withLoadingIco(R.drawable.loading_animation).withLoadingText("加载中...").withOnRetryListener(new OnRetryListener() {
@Override
public void onRetry() {
((ArticleFragmentPresenter) mPresenter).getArticles(params);
}
}).build();
mSwipeRefreshLayout.setOnRefreshListener(this);
mLayoutManager = new LinearLayoutManager(mRecyclerView.getContext());
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (canLoadMore)
ArticleFragment.this.onScrolled(recyclerView, dx, dy);
}
});
params = new TreeMap<String, String>();
params.put("url", mResId);
params.put("page", String.valueOf(page));
((ArticleFragmentPresenter) mPresenter).getArticles(params);
}
@Override
public int getContentLayout() {
return R.layout.list_fragment;
}
private TreeMap<String, String> params;
private int page = 0;
private int pageNo = 0;
private final int pageSize = 30;
@Override
public void onRefresh() {
page = 0;
params.put("url", mResId);
params.put("page", String.valueOf(page));
((ArticleFragmentPresenter) mPresenter).getArticles(params);
}
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
int lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
int totalItemCount = mLayoutManager.getItemCount();
//lastVisibleItem >= totalItemCount - 2 表示剩下2个item自动加载,各位自由选择
// dy>0 表示向下滑动
if (!isLoadingMore && lastVisibleItem >= totalItemCount - 4 && dy > 0) {
isLoadingMore = true;
loadPage();//这里多线程也要手动控制isLoadingMore
}
}
private void loadPage() {
params.put("url", mResId.replace(".html", "-" + (++page) + ".html"));
params.put("page", String.valueOf(page));
((ArticleFragmentPresenter) mPresenter).getArticles(params);
}
private boolean isLoadingMore;
}