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; } }