package cn.bingoogolapple.refreshlayout.demo.ui.fragment;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
import cn.bingoogolapple.androidcommon.adapter.BGAOnItemChildClickListener;
import cn.bingoogolapple.androidcommon.adapter.BGAOnItemChildLongClickListener;
import cn.bingoogolapple.androidcommon.adapter.BGAOnRVItemClickListener;
import cn.bingoogolapple.androidcommon.adapter.BGAOnRVItemLongClickListener;
import cn.bingoogolapple.refreshlayout.BGAMoocStyleRefreshViewHolder;
import cn.bingoogolapple.refreshlayout.BGARefreshLayout;
import cn.bingoogolapple.refreshlayout.demo.R;
import cn.bingoogolapple.refreshlayout.demo.adapter.SwipeRecyclerViewAdapter;
import cn.bingoogolapple.refreshlayout.demo.engine.DataEngine;
import cn.bingoogolapple.refreshlayout.demo.model.RefreshModel;
import cn.bingoogolapple.refreshlayout.demo.ui.activity.MainActivity;
import cn.bingoogolapple.refreshlayout.demo.util.ThreadUtil;
import cn.bingoogolapple.refreshlayout.demo.widget.Divider;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* 作者:王浩 邮件:bingoogolapple@gmail.com
* 创建时间:15/5/22 10:06
* 描述:
*/
public class RefreshSwipeRecyclerViewFragment extends BaseFragment implements BGARefreshLayout.BGARefreshLayoutDelegate, BGAOnRVItemClickListener, BGAOnRVItemLongClickListener, BGAOnItemChildClickListener, BGAOnItemChildLongClickListener {
private SwipeRecyclerViewAdapter mAdapter;
private BGARefreshLayout mRefreshLayout;
private RecyclerView mDataRv;
private int mNewPageNumber = 0;
private int mMorePageNumber = 0;
@Override
protected void initView(Bundle savedInstanceState) {
setContentView(R.layout.fragment_recyclerview_refresh);
mRefreshLayout = getViewById(R.id.rl_recyclerview_refresh);
mDataRv = getViewById(R.id.rv_recyclerview_data);
}
@Override
protected void setListener() {
mRefreshLayout.setDelegate(this);
mAdapter = new SwipeRecyclerViewAdapter(mDataRv);
mAdapter.setOnRVItemClickListener(this);
mAdapter.setOnRVItemLongClickListener(this);
mAdapter.setOnItemChildClickListener(this);
mAdapter.setOnItemChildLongClickListener(this);
mDataRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
if (RecyclerView.SCROLL_STATE_DRAGGING == newState) {
mAdapter.closeOpenedSwipeItemLayoutWithAnim();
}
}
});
}
@Override
protected void processLogic(Bundle savedInstanceState) {
// mRefreshLayout.setCustomHeaderView(DataEngine.getCustomHeaderView(mApp), false);
mAdapter.addHeaderView(DataEngine.getCustomHeaderView(mApp));
BGAMoocStyleRefreshViewHolder moocStyleRefreshViewHolder = new BGAMoocStyleRefreshViewHolder(mApp, true);
moocStyleRefreshViewHolder.setOriginalImage(R.mipmap.bga_refresh_moooc);
moocStyleRefreshViewHolder.setUltimateColor(R.color.imoocstyle);
mRefreshLayout.setRefreshViewHolder(moocStyleRefreshViewHolder);
mDataRv.addItemDecoration(new Divider(mApp));
mDataRv.setLayoutManager(new LinearLayoutManager(mApp));
mDataRv.setAdapter(mAdapter.getHeaderAndFooterAdapter());
}
@Override
protected void onLazyLoadOnce() {
mNewPageNumber = 0;
mMorePageNumber = 0;
mEngine.loadInitDatas().enqueue(new Callback<List<RefreshModel>>() {
@Override
public void onResponse(Call<List<RefreshModel>> call, Response<List<RefreshModel>> response) {
mAdapter.setData(response.body());
}
@Override
public void onFailure(Call<List<RefreshModel>> call, Throwable t) {
}
});
}
@Override
public void onBGARefreshLayoutBeginRefreshing(BGARefreshLayout refreshLayout) {
mNewPageNumber++;
if (mNewPageNumber > 4) {
mRefreshLayout.endRefreshing();
showToast("没有最新数据了");
return;
}
mEngine.loadNewData(mNewPageNumber).enqueue(new Callback<List<RefreshModel>>() {
@Override
public void onResponse(Call<List<RefreshModel>> call, final Response<List<RefreshModel>> response) {
ThreadUtil.runInUIThread(new Runnable() {
@Override
public void run() {
mRefreshLayout.endRefreshing();
mAdapter.addNewData(response.body());
mDataRv.smoothScrollToPosition(0);
}
}, MainActivity.LOADING_DURATION);
}
@Override
public void onFailure(Call<List<RefreshModel>> call, Throwable t) {
mRefreshLayout.endRefreshing();
}
});
}
@Override
public boolean onBGARefreshLayoutBeginLoadingMore(BGARefreshLayout refreshLayout) {
mMorePageNumber++;
if (mMorePageNumber > 4) {
mRefreshLayout.endLoadingMore();
showToast("没有更多数据了");
return false;
}
mEngine.loadMoreData(mMorePageNumber).enqueue(new Callback<List<RefreshModel>>() {
@Override
public void onResponse(Call<List<RefreshModel>> call, final Response<List<RefreshModel>> response) {
ThreadUtil.runInUIThread(new Runnable() {
@Override
public void run() {
mRefreshLayout.endLoadingMore();
mAdapter.addMoreData(response.body());
}
}, MainActivity.LOADING_DURATION);
}
@Override
public void onFailure(Call<List<RefreshModel>> call, Throwable t) {
mRefreshLayout.endLoadingMore();
}
});
return true;
}
@Override
public void onItemChildClick(ViewGroup parent, View childView, int position) {
if (childView.getId() == R.id.tv_item_swipe_delete) {
mAdapter.closeOpenedSwipeItemLayoutWithAnim();
mAdapter.removeItem(position);
}
}
@Override
public boolean onItemChildLongClick(ViewGroup parent, View childView, int position) {
if (childView.getId() == R.id.tv_item_swipe_delete) {
showToast("长按了删除 " + mAdapter.getItem(position).title);
return true;
}
return false;
}
@Override
public void onRVItemClick(ViewGroup parent, View itemView, int position) {
showToast("点击了条目 " + mAdapter.getItem(position).title);
}
@Override
public boolean onRVItemLongClick(ViewGroup parent, View itemView, int position) {
showToast("长按了条目 " + mAdapter.getItem(position).title);
return true;
}
}