package licola.demo.com.huabandemo.Module.ImageDetail; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageButton; import android.widget.RelativeLayout; import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; import butterknife.BindString; import butterknife.ButterKnife; import org.greenrobot.eventbus.EventBus; import licola.demo.com.huabandemo.API.Fragment.OnImageDetailFragmentInteractionListener; import licola.demo.com.huabandemo.API.HttpsAPI.ImageDetailAPI; import licola.demo.com.huabandemo.Adapter.RecyclerPinsHeadCardAdapter; import licola.demo.com.huabandemo.Base.BaseRecyclerHeadFragment; import licola.demo.com.huabandemo.Entity.PinsMainEntity; import licola.demo.com.huabandemo.HttpUtils.ImageLoad.ImageLoadBuilder; import licola.demo.com.huabandemo.HttpUtils.ImageLoad.ImageLoadFresco; import licola.demo.com.huabandemo.HttpUtils.RetrofitClient; import licola.demo.com.huabandemo.R; import licola.demo.com.huabandemo.Util.CompatUtils; import licola.demo.com.huabandemo.Util.Logger; import licola.demo.com.huabandemo.Util.TimeUtils; import rx.Subscriber; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by LiCola on 2016/03/26 19:05 */ public class ImageDetailFragment extends BaseRecyclerHeadFragment<RecyclerPinsHeadCardAdapter, List<PinsMainEntity>> { private static final String TAG = "ImageDetailFragment"; protected int mIndex = 1;//默认值为1 @BindString(R.string.text_like_number) String mStringLikeNumber; @BindString(R.string.text_gather_number) String mStringGatherNumber; @BindString(R.string.text_image_describe_null) String mStringNullDescribe; @BindString(R.string.url_image_small) String mFormatUrlSmall; @BindString(R.string.httpRoot) String mHttpRoot; TextView tv_image_text;//图片的文字描述 TextView tv_image_link;//链接 TextView tv_image_gather;//被采集数量 TextView tv_image_like;//被喜欢数量 RelativeLayout mRLImageUser;//用户信息的父视图 SimpleDraweeView img_image_user;//用户头像 TextView tv_image_user;//用户名 TextView tv_image_time;//采集时间 ImageButton ibtn_image_user_chevron_right; RelativeLayout mRLImageBoard;//画板信息的父视图 SimpleDraweeView img_image_board_1;//归属的画板图片 SimpleDraweeView img_image_board_2; SimpleDraweeView img_image_board_3; SimpleDraweeView img_image_board_4; TextView tv_image_board;//归属的画板名称 ImageButton ibtn_image_board_chevron_right; private PinsMainEntity mPinsBean; private String mBoardId; private String mUserId; private String mBoardName; private String mUserName; private OnImageDetailFragmentInteractionListener mListener; @Override protected String getTAG() { return this.toString(); } //只需要一个Key作为关键字联网 public static ImageDetailFragment newInstance(String key) { ImageDetailFragment fragment = new ImageDetailFragment(); Bundle args = new Bundle(); args.putString(TYPE_KEY, key); fragment.setArguments(args); return fragment; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setViewDrawable(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof OnImageDetailFragmentInteractionListener) { mListener = (OnImageDetailFragmentInteractionListener) context; } else { throwRuntimeException(context); } if (context instanceof ImageDetailActivity) { mAuthorization = ((ImageDetailActivity) context).mAuthorization; mPinsBean = ((ImageDetailActivity) context).mPinsBean; } } //点击事件 Fragment 不做任何的跳转处理 分发给Activity处理 @Override protected void initListener() { super.initListener(); mAdapter.setOnClickItemListener(new RecyclerPinsHeadCardAdapter.OnAdapterListener() { @Override public void onClickImage(PinsMainEntity bean, View view) { EventBus.getDefault().postSticky(bean); mListener.onClickPinsItemImage(bean, view); } @Override public void onClickTitleInfo(PinsMainEntity bean, View view) { 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(); } }); tv_image_link.setOnClickListener(v -> { String link = (String) v.getTag(); Logger.d("link=" + link); mListener.onClickImageLink(link); }); tv_image_gather.setOnClickListener(v -> Logger.d()); // tv_image_like.setOnClickListener(v -> Logger.d()); mRLImageUser.setOnClickListener(v -> { mListener.onClickUserField(mUserId, mUserName); }); mRLImageBoard.setOnClickListener(v -> { mListener.onClickBoardField(mBoardId, mBoardName); }); } @Override public void onResume() { super.onResume(); } private void setViewDrawable() { initTintDrawable(tv_image_gather, R.drawable.ic_camera_black_24dp); initTintDrawable(tv_image_like, R.drawable.ic_favorite_black_24dp); initTintDrawable(ibtn_image_user_chevron_right, R.drawable.ic_chevron_right_black_36dp); initTintDrawable(ibtn_image_board_chevron_right, R.drawable.ic_chevron_right_black_36dp); initTintDrawable(tv_image_link, R.drawable.ic_insert_link_black_24dp); } private void initTintDrawable(View view, int resId) { if (view instanceof ImageButton) { ((ImageButton) view).setImageDrawable (CompatUtils.getTintListDrawable(getContext(), resId, R.color.tint_list_grey)); return; } if (view instanceof TextView) { ((TextView) view).setCompoundDrawablesWithIntrinsicBounds( CompatUtils.getTintListDrawable(getContext(), resId, R.color.tint_list_grey), null, null, null); } } @Override protected Subscription getHttpOther() { return RetrofitClient.createService(ImageDetailAPI.class) .httpsPinsDetailRx(mAuthorization, mKey) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<PinsDetailBean>() { @Override public void onCompleted() { Logger.d(); } @Override public void onError(Throwable e) { Logger.d(e.toString()); //网络错误 使用本地缓存 setImageInfo(mPinsBean); } @Override public void onNext(PinsDetailBean pinsDetailBean) { Logger.d(); //联网成功使用 正确的网络数据 setImageInfo(pinsDetailBean); } }); } @Override protected Subscription getHttpFirst() { return RetrofitClient.createService(ImageDetailAPI.class) .httpPinsRecommendRx(mAuthorization, mKey, mIndex, mLimit) .filter(pinsEntities -> pinsEntities.size() > 0) .subscribeOn(Schedulers.io())//发布者的运行线程 联网操作属于IO操作 .observeOn(AndroidSchedulers.mainThread()) //订阅者的运行线程 在main线程中才能修改UI .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) { mAdapter.addListNotify(pinsEntities); mIndex++;//联网成功 +1 } }); } @Override protected Subscription getHttpScroll() { return getHttpFirst(); } @Override protected View getHeadView() { View headView = LayoutInflater.from(getContext()).inflate(R.layout.view_image_detail_info_head, 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) { tv_image_text = ButterKnife.findById(headView, R.id.tv_image_text); tv_image_link = ButterKnife.findById(headView, R.id.tv_image_link); tv_image_gather = ButterKnife.findById(headView, R.id.tv_image_gather); tv_image_like = ButterKnife.findById(headView, R.id.tv_image_like); tv_image_user = ButterKnife.findById(headView, R.id.tv_image_user); tv_image_time = ButterKnife.findById(headView, R.id.tv_image_about); tv_image_board = ButterKnife.findById(headView, R.id.tv_image_board); img_image_user = ButterKnife.findById(headView, R.id.img_image_user); img_image_board_1 = ButterKnife.findById(headView, R.id.img_image_board_1); img_image_board_2 = ButterKnife.findById(headView, R.id.img_image_board_2); img_image_board_3 = ButterKnife.findById(headView, R.id.img_image_board_3); img_image_board_4 = ButterKnife.findById(headView, R.id.img_image_board_4); ibtn_image_board_chevron_right = ButterKnife.findById(headView, R.id.ibtn_image_board_chevron_right); ibtn_image_user_chevron_right = ButterKnife.findById(headView, R.id.ibtn_image_user_chevron_right); mRLImageUser = ButterKnife.findById(headView, R.id.relativelayout_image_user); mRLImageBoard = ButterKnife.findById(headView, R.id.relativelayout_image_board); } //图像文字信息 填充 private void setImageTextInfo(String raw, String link, String source, int gather, int like) { if (!TextUtils.isEmpty(raw)) { tv_image_text.setText(raw); } else { tv_image_text.setText(mStringNullDescribe); } if ((!TextUtils.isEmpty(link)) && (!TextUtils.isEmpty(source))) { tv_image_link.setText(source); tv_image_link.setTag(link); } else { tv_image_link.setVisibility(View.GONE); } tv_image_gather.setText(String.format(mStringGatherNumber, gather)); setTvImageLikeNumber(like); } private void setTvImageLikeNumber(int like) { tv_image_like.setText(String.format(mStringLikeNumber, like)); } //图像的用户信息 填充 private void setImageUserInfo(String url_head, String username, int created_time) { //因为图片来源不定 需要做处理 if (url_head != null) { if (!url_head.contains(mHttpRoot)) { url_head = String.format(mFormatUrlSmall, url_head); } //用户名头像加载 ImageLoadBuilder.Start(getContext(), img_image_user, url_head) .setPlaceHolderImage(CompatUtils.getTintDrawable(getContext(), R.drawable.ic_account_circle_gray_48dp, Color.GRAY)) .setIsCircle(true) .build(); } //用户名 tv_image_user.setText(username); //创建时间 tv_image_time.setText(TimeUtils.getTimeDifference(created_time, System.currentTimeMillis())); } private void setImageBoardInfo(String url1, String url2, String url3, String url4, String board_name) { //画板名称 if (!TextUtils.isEmpty(board_name)) { tv_image_board.setText(board_name); } else { tv_image_board.setText("暂无画板信息"); } ImageLoadBuilder.Start(getContext(), img_image_board_1, url1) .setIsRadius(true, 5) .build(); // Logger.d("id1=" + img_image_board_1.getId()); ImageLoadBuilder.Start(getContext(), img_image_board_2, url2) .setIsRadius(true, 5) .build(); // Logger.d("id2=" + img_image_board_2.getId()); ImageLoadBuilder.Start(getContext(), img_image_board_3, url3) .setIsRadius(true, 5) .build(); // Logger.d("id3=" + img_image_board_3.getId()); ImageLoadBuilder.Start(getContext(), img_image_board_4, url4) .setIsRadius(true, 5) .build(); // Logger.d("id4=" + img_image_board_4.getId()); } /** * 使用网络数据填充UI控件 赋值全局变量 填充UI控件 * * @param pinsDetailBean 网络bean */ private void setImageInfo(PinsDetailBean pinsDetailBean) { PinsDetailBean.PinBean bean = pinsDetailBean.getPin(); mBoardId = String.valueOf(bean.getBoard_id()); mUserId = String.valueOf(bean.getUser_id()); mBoardName = bean.getBoard().getTitle(); mUserName = bean.getUser().getUrlname(); //描述 setImageTextInfo(bean.getRaw_text(), bean.getLink(), bean.getSource(), bean.getRepin_count(), bean.getLike_count() ); //用户信息 String url = bean.getUser().getAvatar(); setImageUserInfo(url, bean.getUser().getUsername(), bean.getCreated_at() ); //画板信息 String url1 = String.format(mFormatUrlSmall, bean.getBoard().getPins().get(0).getFile().getKey()); String url2 = String.format(mFormatUrlSmall, bean.getBoard().getPins().get(1).getFile().getKey()); String url3 = String.format(mFormatUrlSmall, bean.getBoard().getPins().get(2).getFile().getKey()); String url4 = String.format(mFormatUrlSmall, bean.getBoard().getPins().get(3).getFile().getKey()); setImageBoardInfo(url1, url2, url3, url4, bean.getBoard().getTitle()); } /** * 网络错误使用本地缓存 赋值全局变量 填充UI控件 * * @param bean 本地缓存的bean */ private void setImageInfo(PinsMainEntity bean) { mBoardId = String.valueOf(bean.getBoard_id()); mUserId = String.valueOf(bean.getUser_id()); mBoardName = bean.getBoard().getTitle(); mUserName = bean.getUser().getUrlname(); //描述 setImageTextInfo(bean.getRaw_text(), bean.getLink(), bean.getSource(), bean.getRepin_count(), bean.getLike_count() ); //用户信息 String url = bean.getUser().getAvatar(); setImageUserInfo(url, bean.getUser().getUsername(), bean.getCreated_at() ); //画板信息 String url_file = String.format(mFormatUrlSmall, bean.getFile().getKey()); setImageBoardInfo(url_file, url_file, url_file, url_file, bean.getBoard().getTitle()); } @Override public void onDestroy() { super.onDestroy(); } }