package licola.demo.com.huabandemo.Module.BoardDetail; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import org.greenrobot.eventbus.EventBus; import java.util.List; import butterknife.BindString; import butterknife.ButterKnife; import licola.demo.com.huabandemo.API.Fragment.OnBoardDetailFragmentInteractionListener; import licola.demo.com.huabandemo.API.Fragment.OnPinsFragmentInteractionListener; import licola.demo.com.huabandemo.API.HttpsAPI.BoardDetailAPI; import licola.demo.com.huabandemo.Adapter.RecyclerPinsHeadCardAdapter; import licola.demo.com.huabandemo.Base.BaseActivity; 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.ImageLoad.ImageLoadBuilder; import licola.demo.com.huabandemo.HttpUtils.RetrofitClient; import licola.demo.com.huabandemo.R; 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/03/29 18:12 */ public class BoardDetailFragment extends BaseRecyclerHeadFragment<RecyclerPinsHeadCardAdapter, List<PinsMainEntity>> { private int mMaxId; @BindString(R.string.url_image_small) String mFormatUrlSmall; @BindString(R.string.text_board_describe_null) String mStringNullDescribe; @BindString(R.string.text_attention_number) String mStringAttentionNumber; @BindString(R.string.text_gather_number) String mStringGatherNumber; LinearLayout mLLBoardUser; SimpleDraweeView mImageUser; TextView mTVUserName; TextView mTVBoardDescribe; TextView mTVBoardAttention; TextView mTVBoardGather; private OnBoardDetailFragmentInteractionListener mListener; private String mStringUserKey; private String mStringUserTitle; @Override protected String getTAG() { return this.toString(); } //只需要一个Key作为关键字联网 public static BoardDetailFragment newInstance(String key) { BoardDetailFragment fragment = new BoardDetailFragment(); Bundle args = new Bundle(); args.putString(TYPE_KEY, key); fragment.setArguments(args); return fragment; } @Override protected void initListener() { super.initListener(); mLLBoardUser.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Logger.d(); mListener.onClickUserField(mStringUserKey, mStringUserTitle); } });//画板栏事件 mAdapter.setOnClickItemListener(new RecyclerPinsHeadCardAdapter.OnAdapterListener() { @Override public void onClickImage(PinsMainEntity bean, View view) { EventBus.getDefault().postSticky(bean);//发送bean 而不用知晓接受得类 mListener.onClickPinsItemImage(bean, view); } @Override public void onClickTitleInfo(PinsMainEntity bean, View view) { EventBus.getDefault().postSticky(bean);//发送bean 而不用知晓接受得类 mListener.onClickPinsItemText(bean, view); } @Override public void onClickInfoGather(PinsMainEntity bean, View view) { //某个图片的收集点击 在fragment中直接处理 不用跳转 Logger.d(); } @Override public void onClickInfoLike(PinsMainEntity bean, View view) { //某个图片的喜欢点击 在fragment中直接处理 不用跳转 Logger.d(); } }); } @Override protected Subscription getHttpOther() { return RetrofitClient.createService(BoardDetailAPI.class) .httpsBoardDetailRx(mAuthorization, mKey) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<BoardDetailBean>() { @Override public void onCompleted() { Logger.d(); } @Override public void onError(Throwable e) { Logger.d(e.toString()); //// TODO: 2016/3/29 0029 从父activity应该能取出缓存 设值 } @Override public void onNext(BoardDetailBean boardDetailBean) { mLLBoardUser.setEnabled(true); mStringUserKey = String.valueOf(boardDetailBean.getBoard().getUser().getUser_id()); mStringUserTitle = boardDetailBean.getBoard().getUser().getUsername(); setBoardInfo(boardDetailBean); } }); } /** * 联网返回结果填充数据 * * @param bean 联网返回的bean */ private void setBoardInfo(BoardDetailBean bean) { mListener.onHttpBoardAttentionState(String.valueOf(bean.getBoard().getUser_id()), bean.getBoard().isFollowing()); String url_head = String.format(mFormatUrlSmall, bean.getBoard().getUser().getAvatar()); setBoardUserInfo(url_head, bean.getBoard().getUser().getUsername()); setBoardTextInfo(bean.getBoard().getDescription(), bean.getBoard().getPin_count(), bean.getBoard().getFollow_count()); } private void setBoardTextInfo(String describe, int gather, int attention) { if (!TextUtils.isEmpty(describe)) { mTVBoardDescribe.setText(describe); } else { mTVBoardDescribe.setText(mStringNullDescribe); } mTVBoardGather.setText(String.format(mStringGatherNumber, gather)); mTVBoardAttention.setText(String.format(mStringAttentionNumber, attention)); } private void setBoardUserInfo(String url_head, String username) { ImageLoadBuilder.Start(getContext(),mImageUser,url_head) .setIsCircle(true) .build(); mTVUserName.setText(username); } @Override protected Subscription getHttpFirst() { return RetrofitClient.createService(BoardDetailAPI.class) .httpsBoardPinsRx(mAuthorization, mKey, mLimit) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(new Func1<ListPinsBean, List<PinsMainEntity>>() { @Override public List<PinsMainEntity> call(ListPinsBean listPinsBean) { return listPinsBean.getPins(); } }) .filter(getFilterFunc1()) .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) { mMaxId = getMaxId(pinsEntities); mAdapter.addListNotify(pinsEntities); } }); } private int getMaxId(List<PinsMainEntity> result) { return result.get(result.size() - 1).getPin_id(); } @Override protected Subscription getHttpScroll() { return RetrofitClient.createService(BoardDetailAPI.class) .httpsBoardPinsMaxRx(mAuthorization, mKey, mMaxId, mLimit) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map(new Func1<ListPinsBean, List<PinsMainEntity>>() { @Override public List<PinsMainEntity> call(ListPinsBean listPinsBean) { return listPinsBean.getPins(); } }) .filter(getFilterFunc1()) .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 protected View getHeadView() { View headView = LayoutInflater.from(getContext()).inflate(R.layout.view_board_detail_info, mRecyclerView, false); findHeadView(headView); return headView; } @Override protected int getAdapterPosition() { return mAdapter.getAdapterPosition(); } @Override protected RecyclerPinsHeadCardAdapter setAdapter() { return new RecyclerPinsHeadCardAdapter(mRecyclerView); } private void findHeadView(View headView) { mLLBoardUser = ButterKnife.findById(headView, R.id.linearlayout_board_user); mImageUser = ButterKnife.findById(headView, R.id.img_board_user); mTVUserName = ButterKnife.findById(headView, R.id.tv_board_user); mTVBoardDescribe = ButterKnife.findById(headView, R.id.tv_board_describe); mTVBoardAttention = ButterKnife.findById(headView, R.id.tv_board_attention); mTVBoardGather = ButterKnife.findById(headView, R.id.tv_board_gather); mLLBoardUser.setEnabled(false); } /** * 检查绑定的activity 并得到引用 否则抛出异常 * * @param context */ @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnPinsFragmentInteractionListener) { mListener = (OnBoardDetailFragmentInteractionListener) context;//在绑定时候得到listener的真正引用 } else { throwRuntimeException(context); } if (context instanceof BaseActivity) { mAuthorization = ((BaseActivity) context).mAuthorization; } } @Override public void onDestroy() { super.onDestroy(); } }