package licola.demo.com.huabandemo.Module.Type; import android.content.Context; import android.os.Bundle; import android.view.View; import java.util.List; import org.greenrobot.eventbus.EventBus; import licola.demo.com.huabandemo.API.Fragment.OnPinsFragmentInteractionListener; import licola.demo.com.huabandemo.API.Fragment.OnRefreshFragmentInteractionListener; import licola.demo.com.huabandemo.API.HttpsAPI.TypeAPI; import licola.demo.com.huabandemo.Adapter.RecyclerPinsHeadCardAdapter; import licola.demo.com.huabandemo.Base.BaseRecyclerHeadFragment; import licola.demo.com.huabandemo.Entity.ListPinsBean; import licola.demo.com.huabandemo.Entity.PinsMainEntity; import licola.demo.com.huabandemo.HttpUtils.RetrofitClient; import licola.demo.com.huabandemo.Module.Main.MainActivity; import licola.demo.com.huabandemo.Util.Logger; import rx.Subscriber; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by LiCola on 2016/04/18 14:17 */ public class TypeNewFragment extends BaseRecyclerHeadFragment<RecyclerPinsHeadCardAdapter, List<PinsMainEntity>> { private static final String TAG = "TypeNewFragment"; private int mMaxId = 0; //多定义的字段 一共两个 另一个在父类中继承得到 protected static final String TYPE_TITLE = "TYPE_TITLE"; protected String mTitle; //两个与Activity 交互接口 private OnPinsFragmentInteractionListener mListener; private OnRefreshFragmentInteractionListener mRefreshListener; @Override protected String getTAG() { return this.toString(); } public static TypeNewFragment newInstance(String type, String title) { TypeNewFragment fragment = new TypeNewFragment(); Bundle args = new Bundle(); args.putString(TYPE_KEY, type); args.putString(TYPE_TITLE, title); fragment.setArguments(args); return fragment; } public TypeNewFragment(){ } @Override protected void getBundleData(Bundle args) { if (args != null) { mKey = args.getString(TYPE_KEY); mTitle = args.getString(TYPE_TITLE); } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected Subscription getHttpFirst() { return RetrofitClient.createService(TypeAPI.class) .httpsTypeLimitRx(mAuthorization, mKey, mLimit) .map(new Func1<ListPinsBean, List<PinsMainEntity>>() { @Override public List<PinsMainEntity> call(ListPinsBean listPinsBean) { return listPinsBean.getPins(); } }) .subscribeOn(Schedulers.io())//发布者的运行线程 联网操作属于IO操作 .observeOn(AndroidSchedulers.mainThread())//订阅者的运行线程 在main线程中才能修改UI .subscribe(new Subscriber<List<PinsMainEntity>>() { @Override public void onCompleted() { mRefreshListener.OnRefreshState(false); } @Override public void onError(Throwable e) { Logger.d(e.toString()); mRefreshListener.OnRefreshState(false); checkException(e); } @Override public void onNext(List<PinsMainEntity> result) { Logger.d(); //保存maxId值 后续加载需要 mMaxId = getMaxId(result); mAdapter.setListNotify(result); } }); } /** * 从返回联网结果中保存max值 用于下次联网的关键 * * @param result * @return */ private int getMaxId(List<PinsMainEntity> result) { return result.get(result.size() - 1).getPin_id(); } @Override protected Subscription getHttpScroll() { return RetrofitClient.createService(TypeAPI.class) .httpsTypeMaxLimitRx(mAuthorization, mKey, mMaxId, mLimit) .map(new Func1<ListPinsBean, List<PinsMainEntity>>() { @Override public List<PinsMainEntity> call(ListPinsBean listPinsBean) { //取出list对象 return listPinsBean.getPins(); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<List<PinsMainEntity>>() { @Override public void onCompleted() { Logger.d(); } @Override public void onError(Throwable e) { Logger.d(e.toString()); checkException(e);//检查错误 弹出提示 } @Override public void onNext(List<PinsMainEntity> pinsEntities) { Logger.d(); mMaxId = getMaxId(pinsEntities); mAdapter.addListNotify(pinsEntities); } }); } @Override public void onAttach(Context context) { super.onAttach(context); Logger.d(context.toString()); if ((context instanceof OnRefreshFragmentInteractionListener) && (context instanceof OnPinsFragmentInteractionListener)) { mListener = (OnPinsFragmentInteractionListener) context; mRefreshListener = (OnRefreshFragmentInteractionListener) context; } else { throwRuntimeException(context); } if (context instanceof MainActivity) { mAuthorization = ((MainActivity) context).mAuthorization; } else if (context instanceof TypeActivity) { mAuthorization = ((TypeActivity) context).mAuthorization; } } @Override protected void initListener() { mAdapter.setOnClickItemListener(new RecyclerPinsHeadCardAdapter.OnAdapterListener() { @Override public void onClickImage(PinsMainEntity bean, View view) { Logger.d(); EventBus.getDefault().postSticky(bean); mListener.onClickPinsItemImage(bean, view); } @Override public void onClickTitleInfo(PinsMainEntity bean, View view) { Logger.d(); EventBus.getDefault().postSticky(bean); mListener.onClickPinsItemText(bean, view); } @Override public void onClickInfoGather(PinsMainEntity bean, View view) { Logger.d(); } @Override public void onClickInfoLike(PinsMainEntity bean, View view) { Logger.d(bean.toString()); // int count=bean.getLike_count()+1; // bean.setLike_count(count); // mAdapter.notifyDataSetChanged(); // startLike(); } }); } @Override protected View getHeadView() { return null; } @Override protected int getAdapterPosition() { return mAdapter.getAdapterPosition(); } @Override protected RecyclerPinsHeadCardAdapter setAdapter() { return new RecyclerPinsHeadCardAdapter(mRecyclerView); } @Override public void onDestroy() { super.onDestroy(); mAdapter=null; mListener=null; } }