RecyclerView 替换 Scrollview,gridview 组合。

至于为何要这么做,无需多言,相信大家深有体会。

先上主布局文件以及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>


切记,item的根布局的高度一定设置为“wrap_content”,否则,会出现item的高度和屏幕高度一样。


Fragment代码片段:

	pullToRefreshLayout = (PullToRefreshLayout) findViewById(R.id.refresh_view);
        homeRecommend_RecyclerView = (PullableRecyclerView) pullToRefreshLayout.getPullableView();
	homeRecommendGoodsRecyclerViewAdapter = new HomeRecommendGoodsRecyclerViewAdapter(context, homeRecommend_RecyclerView, list1, homeRecommend_RecyclerView_HeaderView);
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完整代码:

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);
        }
    }
}
 第一次写,不太完整,请勿喷。有问题请加扣扣:1401429109,细细沟通。

附带:PulltoRefreshLibiry类库。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值