package com.xiaweizi.qnews.fragment; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.Toast; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.listener.OnItemLongClickListener; import com.xiaweizi.qnews.R; import com.xiaweizi.qnews.adapter.JokeAdapter; import com.xiaweizi.qnews.bean.JokeBean; import com.xiaweizi.qnews.commons.Constants; import com.xiaweizi.qnews.commons.ShareUtils; import com.xiaweizi.qnews.net.QClitent; import com.xiaweizi.qnews.net.QNewsService; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; /** * 工程名: QNews * 包名: com.xiaweizi.qnews.fragment * 类名: JokeFragment * 创建者: 夏韦子 * 创建日期: 2017/2/11 * 创建时间: 13:44 */ public class JokeFragment extends Fragment { @BindView (R.id.tb_joke) Toolbar tbJoke; @BindView (R.id.rv_joke) RecyclerView rvJoke; @BindView (R.id.srl_joke) SwipeRefreshLayout srlJoke; @BindView (R.id.ll_loading) LinearLayout llLoading; @BindView (R.id.ll_error) LinearLayout llError; private JokeAdapter mAdapter; List<JokeBean.ResultBean.DataBean> mData; private int mCurrentCounter; private int mTotalCounter = 5; @Nullable @Override public View onCreateView( LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_joke, null); ButterKnife.bind(this, view); //数据初始化 mData = new ArrayList<>(); mAdapter = new JokeAdapter(); mAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_RIGHT); //设置下拉刷新 srlJoke.setColorSchemeColors(Color.RED, Color.GREEN, Color.YELLOW); srlJoke.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { updateDate(); } }); rvJoke.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false)); rvJoke.setAdapter(mAdapter); rvJoke.addOnItemTouchListener(new OnItemLongClickListener() { @Override public void onSimpleItemLongClick(BaseQuickAdapter adapter, View view, int position) { String content = mAdapter.getItem(position).getContent(); ShareUtils.share(getActivity(), content + "\n http://www.jianshu.com/u/d36586119d8c"); } }); mAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { @Override public void onLoadMoreRequested() { rvJoke.postDelayed(new Runnable() { @Override public void run() { if (mCurrentCounter >= mTotalCounter) { //数据加载完成 mAdapter.loadMoreEnd(); } else { if (mAdapter.getItem(0) == null) { return; } long unixtime = mAdapter.getItem(mAdapter.getItemCount() - 2) .getUnixtime(); QClitent.getInstance() .create(QNewsService.class, Constants.BASE_JOKE_URL) // 创建服务 .getAssignJokeData(unixtime, 1, 5, QNewsService.DESC) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<JokeBean>() { @Override public void accept(JokeBean jokeBean) throws Exception { List<JokeBean.ResultBean.DataBean> data = jokeBean.getResult().getData(); mAdapter.addData(data); mCurrentCounter = mTotalCounter; mTotalCounter += 5; mAdapter.loadMoreComplete(); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { mAdapter.loadMoreFail(); } }); } } }, 1000); } }); updateDate(); return view; } private void updateDate() { srlJoke.setVisibility(View.VISIBLE); llLoading.setVisibility(View.VISIBLE); llError.setVisibility(View.GONE); srlJoke.setRefreshing(true); // 让SwipeRefreshLayout开启刷新 QClitent.getInstance().create(QNewsService.class, Constants.BASE_JOKE_URL) // 创建服务 .getCurrentJokeData(1, 8) // 查询查询 .subscribeOn(Schedulers.io()) // 指定被观察者的操作在io线程中完成 .observeOn(AndroidSchedulers.mainThread()) // 指定观察者接收到数据,然后在Main线程中完成 .subscribe(new Consumer<JokeBean>() { @Override public void accept(JokeBean jokeBean) throws Exception { // 成功获取数据 llLoading.setVisibility(View.GONE); llError.setVisibility(View.GONE); mAdapter.setNewData(jokeBean.getResult().getData()); // 给适配器设置数据 srlJoke.setRefreshing(false); // 让SwipeRefreshLayout关闭刷新 } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { // 获取数据失败 Toast.makeText(getActivity(), "获取数据失败!" + "访问次数上限", Toast.LENGTH_SHORT) .show(); srlJoke.setRefreshing(false); llError.setVisibility(View.VISIBLE); llLoading.setVisibility(View.GONE); srlJoke.setVisibility(View.GONE); } }); } @OnClick (R.id.tv_joke_load_again) public void onClick(View view) { updateDate(); } }