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.avos.avoscloud.AVObject;
import com.pan.simplepicture.R;
import com.pan.simplepicture.adapter.BaseRecyclerAdapter;
import com.pan.simplepicture.inter.LoadingState;
import com.pan.simplepicture.inter.OnRetryListener;
import com.pan.simplepicture.presenter.CommentPresenter;
import com.pan.simplepicture.presenter.RecommendPresenter;
import com.pan.simplepicture.utils.NetWorkUtil;
import com.pan.simplepicture.view.holder.CommentHolder;
import com.pan.simplepicture.view.impl.ICommentView;
import com.pan.simplepicture.widget.LoadingView;
import java.util.List;
import java.util.TreeMap;
import butterknife.Bind;
import de.greenrobot.event.EventBus;
public class CommentFragment extends BaseFragment implements ICommentView, SwipeRefreshLayout.OnRefreshListener {
@Bind(R.id.recycler_view)
public RecyclerView mRecyclerView;
private BaseRecyclerAdapter mAdapter;
private boolean canLoadMore = true;
@Override
public void setAdapter(List<AVObject> list) {
if (mRecyclerView == null) return;
pageNo = list.size();
if (pageNo < pageSize)
canLoadMore = false;
if (mAdapter == null) {
mAdapter = new BaseRecyclerAdapter(list, R.layout.comment_item, CommentHolder.class);
mRecyclerView.setAdapter(mAdapter);
} else {
if ((mAdapter.getItem(0) == null) && (list.size() == 0))
return;
if ((mAdapter.getItem(0) == null) || (list.size() == 0) || (!((AVObject) mAdapter.getItem(0)).getObjectId().equals(list.get(0).getObjectId())))
mAdapter.setmDatas(list);
}
}
@Override
public void loadMore(List<AVObject> 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 CommentPresenter getPresenter() {
return new CommentPresenter();
}
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() {
fl_loading.setVisibility(View.VISIBLE);
mSwipeRefreshLayout.setVisibility(View.GONE);
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 setResId(String mResId) {
this.mResId = mResId;
}
public void onEventMainThread(AVObject object) {
if (object == null) return;
if (mSwipeRefreshLayout.getVisibility() != View.VISIBLE) {
fl_loading.setVisibility(View.GONE);
mSwipeRefreshLayout.setVisibility(View.VISIBLE);
}
mAdapter.add(0, object);
mRecyclerView.scrollToPosition(0);
}
@Override
public void bindView(Bundle savedInstanceState) {
if (TextUtils.isEmpty(mResId) || mPresenter == null || !(mPresenter instanceof CommentPresenter)) {
return;
}
EventBus.getDefault().register(this);
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() {
((CommentPresenter) mPresenter).getComments(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)
CommentFragment.this.onScrolled(recyclerView, dx, dy);
}
});
params = new TreeMap<String, String>();
params.put("pageNo", String.valueOf(pageNo));
params.put("class", "Comment");
params.put("rsId", mResId);
params.put("size", String.valueOf(pageSize));
params.put("order", "published");
((CommentPresenter) mPresenter).getComments(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 = 15;
@Override
public void onRefresh() {
pageNo = 0;
params.put("pageNo", String.valueOf(pageNo));
((CommentPresenter) mPresenter).getComments(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("pageNo", String.valueOf(pageNo));
((CommentPresenter) mPresenter).getComments(params);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
private boolean isLoadingMore;
}