package com.tejia.lijin.app.ui.recommend;
|
|
import android.content.Context;
|
import android.content.Intent;
|
|
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.TextView;
|
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.nostra13.universalimageloader.core.DisplayImageOptions;
|
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
|
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
|
import com.wpc.library.util.common.DimenUtils;
|
import com.wpc.library.util.common.StringUtils;
|
import com.tejia.lijin.app.R;
|
import com.tejia.lijin.app.entity.TaoBaoGoodsBrief;
|
import com.tejia.lijin.app.util.GlideRoundTransform;
|
import com.tejia.lijin.app.util.goods.GoodsDetailJumpUtil;
|
import com.tejia.lijin.app.util.goods.GoodsDetailListUtil;
|
import com.tejia.lijin.app.util.ui.GoodsRightViewHolder;
|
import com.tejia.lijin.app.util.umengCustomEvent.CategoryCustomEvent;
|
import com.wpc.library.util.MoveRecycleView.ItemTouchHelperAdapter;
|
|
import java.util.Collections;
|
import java.util.List;
|
|
/**
|
* Created by weikou2015 on 2017/12/5.
|
* 九宫格与横屏适配器
|
*/
|
|
public class RecommendCategoryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements ItemTouchHelperAdapter {
|
private RecyclerView mRecyclerView;
|
|
private List<TaoBaoGoodsBrief> mList;
|
private Context mContext;
|
|
private View VIEW_FOOTER;
|
private View VIEW_HEADER;
|
|
//Type
|
private int TYPE_NORMAL = 1000;
|
private int TYPE_HEADER = 1001;
|
public int TYPE_FOOTER = 1002;
|
|
public boolean isFirst;
|
String from;
|
private String type;
|
private DisplayImageOptions options;
|
|
public RecommendCategoryAdapter(Context context, List<TaoBaoGoodsBrief> list, String type, String from) {
|
this.from = from;
|
this.mList = list;
|
this.mContext = context;
|
this.type = type;
|
this.options = new DisplayImageOptions.Builder()
|
.showImageForEmptyUri(R.drawable.ic_goods_default)
|
.showImageOnFail(R.drawable.ic_goods_default)
|
.showImageOnLoading(R.drawable.ic_goods_default)
|
.resetViewBeforeLoading(true).cacheInMemory(true)
|
.cacheOnDisk(true).imageScaleType(ImageScaleType.EXACTLY)
|
.considerExifParams(true)
|
.displayer(new RoundedBitmapDisplayer(DimenUtils
|
.dip2px(mContext, 5))).build();
|
}
|
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
if (viewType == TYPE_FOOTER) {
|
return new ViewHolder(VIEW_FOOTER);
|
} else if (viewType == TYPE_HEADER) {
|
return new ViewHolder(VIEW_HEADER);
|
} else {
|
View view = LayoutInflater.from(mContext).inflate(R.layout.item_goods, parent, false);
|
ViewHolder holder = new ViewHolder(view);
|
return holder;
|
}
|
}
|
|
@Override
|
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
|
if (!isHeaderView(position) && !isFooterView(position)) {
|
final TaoBaoGoodsBrief info;
|
if (haveHeaderView()) {
|
info = mList.get(position - 1);
|
} else if (haveFooterView() && ((haveHeaderView() && position == mList.size() + 1) ||
|
!haveHeaderView() && position == mList.size())) {
|
return;
|
} else {
|
info = mList.get(position);
|
}
|
ViewHolder viewHolder = (ViewHolder) holder;
|
viewHolder.ll_recommend_gv.setVisibility(View.GONE);
|
viewHolder.ll_item1.setVisibility(View.VISIBLE);
|
|
if (!isFirst) {
|
if ((haveHeaderView() && position % 2 == 1) ||
|
(!haveHeaderView() && position % 2 == 0)) {
|
// Log.e("mResult", "position:" + position);
|
viewHolder.v_left.setVisibility(View.VISIBLE);
|
} else {
|
viewHolder.v_left.setVisibility(View.GONE);
|
}
|
} else {
|
viewHolder.v_left.setVisibility(View.GONE);
|
}
|
|
|
|
/**********************************更具需求不在是搜索结果页才显示商铺名字*************/
|
// if (from.equalsIgnoreCase("search")) {
|
// TODO 报空指针,需要修复
|
// if (info.getShopInfo() != null) {
|
// viewHolder.ll_shop.setVisibility(View.VISIBLE);
|
// viewHolder.tv_shop_name.setText(info.getShopInfo().getShopName());
|
// } else {
|
// viewHolder.ll_shop.setVisibility(View.GONE);
|
// }
|
|
GoodsDetailListUtil.setGoodsDetail(mContext,info,viewHolder.goodsDetail);
|
|
// 图片
|
Glide.with(mContext).load(info.getPicUrl()).
|
placeholder(R.drawable.ic_goods_default).error(R.drawable.ic_goods_default).
|
transform(new GlideRoundTransform(mContext, 5))
|
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
.into(viewHolder.iv_pic1);
|
|
viewHolder.ll_item1.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View v) {
|
if (!StringUtils.isEmpty(type))
|
CategoryCustomEvent.classGoods(mContext, type);
|
Intent intent= new Intent(mContext, GoodsDetailActivity.class);
|
intent.putExtra("goodsId", info.getGoodsId());
|
intent.putExtra("goodsType", info.getGoodsType());
|
intent.putExtra("title", info.getTitle());
|
intent.putExtra("from", from);
|
mContext.startActivity(intent);
|
}
|
});
|
}
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = (mList == null ? 0 : mList.size());
|
if (VIEW_FOOTER != null) {
|
count++;
|
}
|
|
if (VIEW_HEADER != null) {
|
count++;
|
}
|
return count;
|
}
|
|
@Override
|
public int getItemViewType(int position) {
|
if (isHeaderView(position)) {
|
return TYPE_HEADER;
|
} else if (isFooterView(position)) {
|
return TYPE_FOOTER;
|
} else {
|
return TYPE_NORMAL;
|
}
|
}
|
|
@Override
|
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
|
try {
|
if (mRecyclerView == null && mRecyclerView != recyclerView) {
|
mRecyclerView = recyclerView;
|
}
|
ifGridLayoutManager();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
@Override
|
public void onItemMove(RecyclerView.ViewHolder source,
|
RecyclerView.ViewHolder target, int direction) {
|
int fromPosition = source.getAdapterPosition();
|
int toPosition = target.getAdapterPosition();
|
if (direction == 1) {
|
toPosition = fromPosition - 2;
|
} else if (direction == 2) {
|
toPosition = fromPosition + 2;
|
} else if (direction == 3) {
|
toPosition = fromPosition - 1;
|
} else if (direction == 4) {
|
toPosition = fromPosition + 1;
|
}
|
if (toPosition >= 0 & fromPosition < mList.size() && toPosition < mList.size()) {
|
// Log.e("mResult", "fromPosition:" + fromPosition + "---toPosition:" + toPosition);
|
//交换数据位置
|
Collections.swap(mList, fromPosition, toPosition);
|
//刷新位置交换
|
notifyItemMoved(fromPosition, toPosition);
|
}
|
//移动过程中移除view的放大效果
|
onItemClear(source);
|
}
|
|
@Override
|
public void onItemDissmiss(RecyclerView.ViewHolder source) {
|
|
int position = source.getAdapterPosition();
|
mList.remove(position); //移除数据
|
notifyItemRemoved(position);//刷新数据移除
|
}
|
|
@Override
|
public void onItemSelect(RecyclerView.ViewHolder viewHolder) {
|
|
//当拖拽选中时放大选中的view
|
viewHolder.itemView.setScaleX(1.1f);
|
viewHolder.itemView.setScaleY(1.1f);
|
}
|
|
@Override
|
public void onItemClear(RecyclerView.ViewHolder viewHolder) {
|
|
//拖拽结束后恢复view的状态
|
viewHolder.itemView.setScaleX(1.0f);
|
viewHolder.itemView.setScaleY(1.0f);
|
}
|
|
private View getLayout(int layoutId) {
|
return LayoutInflater.from(mContext).inflate(layoutId, null);
|
}
|
|
public void addHeaderView(View headerView) {
|
if (haveHeaderView()) {
|
throw new IllegalStateException("hearview has already exists!");
|
} else {
|
//避免出现宽度自适应
|
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
headerView.setLayoutParams(params);
|
VIEW_HEADER = headerView;
|
ifGridLayoutManager();
|
notifyItemInserted(0);
|
}
|
|
}
|
|
public void addFooterView(View footerView) {
|
if (haveFooterView()) {
|
throw new IllegalStateException("footerView has already exists!");
|
} else {
|
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
footerView.setLayoutParams(params);
|
VIEW_FOOTER = footerView;
|
ifGridLayoutManager();
|
notifyItemInserted(getItemCount() - 1);
|
}
|
}
|
|
private void ifGridLayoutManager() {
|
if (mRecyclerView == null) return;
|
final RecyclerView.LayoutManager layoutManager = mRecyclerView.getLayoutManager();
|
if (layoutManager instanceof GridLayoutManager) {
|
((GridLayoutManager) layoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
|
@Override
|
public int getSpanSize(int position) {
|
if (isHeaderView(position) || isFooterView(position)) {
|
return ((GridLayoutManager) layoutManager).getSpanCount();
|
} else {
|
return 1;
|
}
|
}
|
});
|
}
|
}
|
|
public boolean haveHeaderView() {
|
return VIEW_HEADER != null;
|
}
|
|
public boolean haveFooterView() {
|
return VIEW_FOOTER != null;
|
}
|
|
private boolean isHeaderView(int position) {
|
return haveHeaderView() && position == 0;
|
}
|
|
private boolean isFooterView(int position) {
|
return haveFooterView() && position >= getItemCount() - 1;
|
}
|
|
|
class ViewHolder extends RecyclerView.ViewHolder {
|
TextView tv_name;
|
TextView tv_price;
|
TextView tv_coupon_price;
|
LinearLayout ll_coupon_bg;
|
TextView tv_shop_name;
|
LinearLayout ll_coupon;
|
LinearLayout ll_shop;
|
TextView tv_normal_price;
|
LinearLayout ll_recommend_gv;
|
TextView tv_favourable;//红包,券后价
|
TextView tv_sale_num;
|
ImageView iv_pic;
|
ImageView iv_pic1;
|
ImageView iv_close;
|
View v_left;
|
TextView tv_shop_name1;
|
LinearLayout ll_shop1;
|
LinearLayout ll_item1;
|
|
GoodsRightViewHolder goodsDetail;
|
|
public ViewHolder(View convertView) {
|
super(convertView);
|
/*
|
竖屏
|
*/
|
goodsDetail = new GoodsRightViewHolder(convertView);
|
iv_pic = convertView
|
.findViewById(R.id.iv_movie_cover);
|
iv_pic1 = convertView
|
.findViewById(R.id.iv_movie_cover1);
|
tv_normal_price = convertView
|
.findViewById(R.id.tv_normal_price);
|
tv_shop_name = convertView
|
.findViewById(R.id.tv_shop_name2);
|
tv_name = convertView
|
.findViewById(R.id.tv_movie_title);
|
tv_price = convertView.findViewById(R.id.tv_price);
|
ll_coupon_bg = convertView.findViewById(R.id.ll_coupon_bg);
|
tv_coupon_price = convertView.findViewById(R.id.tv_coupon_price);
|
ll_coupon = convertView.findViewById(R.id.ll_coupon);
|
ll_recommend_gv = convertView.findViewById(R.id.ll_recommend_gv);
|
tv_favourable = convertView.findViewById(R.id.tv_favourable);
|
tv_sale_num = convertView.findViewById(R.id.tv_sale_num);
|
ll_shop = convertView.findViewById(R.id.ll_shop2);
|
|
/*
|
横屏
|
*/
|
v_left = convertView.findViewById(R.id.v_left);
|
ll_item1 = convertView.findViewById(R.id.ll_horizontal_item);
|
tv_shop_name1 = convertView
|
.findViewById(R.id.tv_shop_name1);
|
ll_shop1 = convertView.findViewById(R.id.ll_shop1);
|
iv_close = convertView.findViewById(R.id.iv_close);
|
}
|
}
|
|
}
|