至于为何要这么做,无需多言,相信大家深有体会。
先上主布局文件以及item布局文件,
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.jingchen.pulltorefresh.PullToRefreshLayout
android:id="@+id/refresh_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/icon_11_11">
<com.jingchen.pulltorefresh.PullableRecyclerView
android:id="@+id/homeRecommend_RecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f4f5f9"
android:horizontalSpacing="10dp"
android:numColumns="2"
android:verticalSpacing="10dp"/>
</com.jingchen.pulltorefresh.PullToRefreshLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_RelativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF">
<ImageView
android:id="@+id/goods_ImageView"
android:layout_width="175dp"
android:layout_height="175dp"
android:layout_centerHorizontal="true"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:src="@mipmap/goodsimagetest"/>
<TextView
android:id="@+id/goodsname_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/goods_ImageView"
android:layout_centerHorizontal="true"
android:ellipsize="end"
android:maxEms="14"
android:singleLine="true"
android:text="恋白茹时尚两件套装棉麻牛仔裙韩版女装衣服春秋呵呵呵呵呵呵"
android:textColor="#000000"
android:textSize="14dp"/>
<TextView
android:id="@+id/goodstrueprice_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/goodsname_TextView"
android:layout_below="@id/goodsname_TextView"
android:layout_marginTop="5dp"
android:text="¥198"
android:textColor="#ff00"
android:textSize="17dp"/>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/goodstrueprice_TextView"
android:layout_toRightOf="@id/goodstrueprice_TextView">
<TextView
android:id="@+id/goodsoldprice_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@id/goodsname_TextView"
android:text="¥498"
android:textColor="#999999"
android:textSize="12dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="2px"
android:layout_gravity="center_vertical"
android:background="#999999"/>
</FrameLayout>
</RelativeLayout>
Fragment代码片段:
pullToRefreshLayout = (PullToRefreshLayout) findViewById(R.id.refresh_view);
homeRecommend_RecyclerView = (PullableRecyclerView) pullToRefreshLayout.getPullableView();
‘
homeRecommend_RecyclerView_HeaderView为头布局,随意写。homeRecommendGoodsRecyclerViewAdapter = new HomeRecommendGoodsRecyclerViewAdapter(context, homeRecommend_RecyclerView, list1, homeRecommend_RecyclerView_HeaderView);
设置recyclerView为gridview模式,并重写setSpanSizeLookup函数解决头布局只占据gridview第一个item位置的问题
final GridLayoutManager gridLayoutManager = new GridLayoutManager(context, 2); // gridLayoutManager.setAutoMeasureEnabled(false); gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return homeRecommendGoodsRecyclerViewAdapter.isHeader(position) ? gridLayoutManager.getSpanCount() : 1; } }); homeRecommend_RecyclerView.setLayoutManager(gridLayoutManager); // homeRecommend_RecyclerView.setHasFixedSize(false); homeRecommend_RecyclerView.setAdapter(homeRecommendGoodsRecyclerViewAdapter);
Adapter完整代码:
第一次写,不太完整,请勿喷。有问题请加扣扣:1401429109,细细沟通。package com.maoyudun.alimamaproject.adapter; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.os.Build; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.alibaba.baichuan.android.trade.AlibcTrade; import com.alibaba.baichuan.android.trade.callback.AlibcTradeCallback; import com.alibaba.baichuan.android.trade.constants.AlibcConstants; import com.alibaba.baichuan.android.trade.model.AlibcShowParams; import com.alibaba.baichuan.android.trade.model.AlibcTaokeParams; import com.alibaba.baichuan.android.trade.model.OpenType; import com.alibaba.baichuan.android.trade.model.TradeResult; import com.alibaba.baichuan.android.trade.page.AlibcBasePage; import com.alibaba.baichuan.android.trade.page.AlibcDetailPage; import com.jingchen.pulltorefresh.WrapRecyclerView; import com.maoyudun.alimamaproject.R; import com.maoyudun.alimamaproject.bean.Aitaobao_item; import com.maoyudun.alimamaproject.bean.HomeRecommendGoodsInfo; import com.maoyudun.alimamaproject.util.DataUtilImpl; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by Administrator on 2016/10/20. * 推荐adapater */ public class HomeRecommendGoodsRecyclerViewAdapter extends BaseAutoLoadMoreAdapter<HomeRecommendGoodsInfo> { /** * item类型 * */ private static final int ITEM_VIEW_TYPE_HEADER = 0; private static final int ITEM_VIEW_TYPE_ITEM = 1; /** * 头布局 * */ private View header; private ArrayList<HomeRecommendGoodsInfo> mDatas; private Context context; private int layoutID = R.layout.homerecommendgoodsgridviewitem; private LayoutInflater mInflater; private ImageLoader imageLoader = ImageLoader.getInstance(); private DataUtilImpl dataUtilImpl = DataUtilImpl.getInstance(); public HomeRecommendGoodsRecyclerViewAdapter(Context context, WrapRecyclerView recyclerView, ArrayList<HomeRecommendGoodsInfo> data, View header) { super(context, recyclerView, data); this.mDatas = data; this.context = context; this.mInflater = LayoutInflater.from(context); this.header = header; } @Override public BaseViewHolder onCreateBaseViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_VIEW_TYPE_HEADER) { return new BaseViewHolder(header); } else { return new ViewHolder(mInflater.inflate(layoutID, parent, false)); } } @Override public int getItemHeight(RecyclerView.ViewHolder holder) { holder.itemView.measure(0, 0); return holder.itemView.getMeasuredHeight(); } @Override public void onBindBaseViewHolder(BaseViewHolder holder, final int position) { /** * item类型为头布局,直接返回头布局,否则解析item进行数据填充 * */ if (isHeader(position)) { return; } else { final ViewHolder finalViewHolder = (ViewHolder) holder; /** * 因为添加头部局而把item数量加一,所以获取数据时,position 应该减一 * */ // imageLoader.loadImage(mDatas.get(position - 1).getImageurl(), new ImageLoadingListener() // { // @Override // public void onLoadingStarted(String imageUri, View view) // {} // // @Override // public void onLoadingFailed(String imageUri, View view, FailReason failReason) // {} // // @TargetApi(Build.VERSION_CODES.JELLY_BEAN) // @Override // public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) // { // if(!loadedImage.isRecycled()) // { // System.out.println("i交话费机会股价大幅估计是都不能不给哦就关机普尔那口"); // loadedImage = dataUtilImpl.scaleBitmap(loadedImage, (float) 0.4375); // finalViewHolder.goodsImage.setImageBitmap(loadedImage); // finalViewHolder.goodsImage.animate().alpha(1f).setDuration(200) // .setListener(new AnimatorListenerAdapter() // { // @Override // public void onAnimationEnd(Animator animation) // { // finalViewHolder.goodsImage.setVisibility(View.VISIBLE); // super.onAnimationEnd(animation); // } // }); // } // } // // @Override // public void onLoadingCancelled(String imageUri, View view) // {} // }); // finalViewHolder.goodsName.setText(mDatas.get(position).getName()); // finalViewHolder.goodsOldprice.setText(mDatas.get(position).getOldprice()); // finalViewHolder.goodsTrueprice.setText(mDatas.get(position).getTrueprice()); // finalViewHolder.ll.setOnClickListener(new View.OnClickListener() // { // @Override // public void onClick(View v) // {} // }); } } @Override public int getItemCount() { /** * 因为添加了头布局,所以数量加一 * */ return mDatas.size() + 1; } @Override public int getItemViewType(int position) { /** * 第一个布局即为头布局 * */ return isHeader(position) ? ITEM_VIEW_TYPE_HEADER : ITEM_VIEW_TYPE_ITEM; } /** * 判断是否是头布局 * */ public boolean isHeader(int position) { if(position == 0) { return true; } return false; } public class ViewHolder extends BaseViewHolder { public ImageView goodsImage; public TextView goodsName; public TextView goodsTrueprice; public TextView goodsOldprice; public RelativeLayout ll; public ViewHolder(View itemView) { super(itemView); goodsImage = (ImageView) itemView.findViewById(R.id.goods_ImageView); goodsName = (TextView) itemView.findViewById(R.id.goodsname_TextView); goodsTrueprice = (TextView) itemView.findViewById(R.id.goodstrueprice_TextView); goodsOldprice = (TextView) itemView.findViewById(R.id.goodsoldprice_TextView); ll = (RelativeLayout) itemView.findViewById(R.id.root_RelativeLayout); } } }
附带:PulltoRefreshLibiry类库。