RecyclerView 替換 Scrollview,gridview 組合。
阿新 • • 發佈:2019-01-11
至於為何要這麼做,無需多言,相信大家深有體會。
先上主佈局檔案以及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>
切記,item的根佈局的高度一定設定為“wrap_content”,否則,會出現item的高度和螢幕高度一樣。<?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完整程式碼:
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類庫。