English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Android Implementation of RecyclerView with Classification to Mimic Homepage of Major Shopping Platforms

**As the saying goes, once you enter the mall, it's deep as the sea.~
As the saying goes, once you enter the mall, it's deep as the sea.~**

The effect is as shown in the figure below:

1.The large layout is just a simple RecyclerView:

.You can also achieve this by adding multiple headers

4.Here, I will take four types as an example

/** 
 * 4Types 
 */ 
 /** 
 * Type1: Black Friday--Implemented using banner 
 */ 
 public static final int BLACK_5_BANNER0 = 0; 
 /** 
 *Type2: New Products Today--Implemented using GridView 
 */ 
 public static final int TODAY_NEW_GV1 = 1; 
 /** 
 * Type3: Brand Benefits--Implemented using ImageView 
 */ 
 public static final int PIN_PAI_IV2=2; 
 /** 
 * Type4: Trending--Implemented using RecyclerView 
 */ 
 public static final int DAPEIQS_GV3 =3; 
 /** 
 * Current Type 
 */ 
 public int currentType = BLACK_5_BANNER0; 

Write the constructor and pass in parameters, improve the getItemCount() and getItemType() methods

/** 
  * Data Object 
  */ 
 private final Context mContext; 
 private final List<WomenBean.WomenData.ModuleBean> moduleBeanList; 
 //Use it later to initialize the layout 
 private final LayoutInflater mLayoutInflater; 
 //Constructor 
 public HomeRecycleViewAdapter3(Context mContext, List<WomenBean.WomenData.ModuleBean> moduleBeanList) { 
  this.mContext = mContext; 
  this.moduleBeanList = moduleBeanList; 
  //Use it later to initialize the layout 
  mLayoutInflater = LayoutInflater.from(mContext); 
 } 
 @Override 
 public int getItemCount() { 
  //is completed, and then change to4Now only the first type is completed temporarily1 
  return 1; 
 } 
 @Override 
 public int getItemViewType(int position) { 
  switch (position) { 
   case BLACK_5_BANNER0: 
    currentType = BLACK_5_BANNER0; 
    break; 
   case TODAY_NEW_GV1: 
    currentType = TODAY_NEW_GV1; 
    break; 
   case PIN_PAI_IV2: 
    currentType = PIN_PAI_IV2; 
    break; 
   case DAPEIQS_GV3: 
    currentType = DAPEIQS_GV3; 
    break; 
  } 
  return currentType; 
 } 

5Below will implement these four types one by one

5.1Set the1Adapter for the first type - Black Friday (using banner)

@Override 
 public int getItemCount() { 
  //is completed, and then change to4Now only the first type is completed temporarily1 
  return 1; 
 } 
 @Override 
 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  if (viewType == BLACK_5_BANNER0) { 
   return new BBNViewHolder(mContext, mLayoutInflater.inflate(R.layout.banner_viewpager, null)); 
  } 
  return null; 
 } 
 @Override 
 public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
  if (getItemViewType(position) == BLACK_5_BANNER0) { 
   BBNViewHolder bbnViewHolder = (BBNViewHolder) holder; 
   List<WomenBean.WomenData.ModuleBean.DataBean> module0data = moduleBeanList.get(0).getData(); 
   bbnViewHolder.setData(module0data); 
  } 
 } 
 public class BBNViewHolder extends RecyclerView.ViewHolder { 
  private final Context mContext; 
  private Banner banner; 
  public BBNViewHolder(Context mContext, View itemView) { 
   super(itemView); 
   this.mContext = mContext; 
   banner = (Banner) itemView.findViewById(R.id.banner); 
  } 
  public void setData(List<WomenBean.WomenData.ModuleBean.DataBean> module0data) { 
   //Get the collection of image addresses 
   List<String> imageUrls = new ArrayList<>(); 
   for (int i = 0; i < module0data.size(); i++) { 
    String image = module0data.get(i).getImg(); 
    imageUrls.add(image); 
   } 
   //Usage of the new version of banner----Lazy usage method 
   banner.setImages(imageUrls).setImageLoader(new GlideImageLoader()).start(); 
  } 
 } 
 public class GlideImageLoader extends ImageLoader { 
  @Override 
  public void displayImage(Context context, Object path, ImageView imageView) { 
   imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
   //Simple usage of Glide for loading images 
   Glide.with(context).load(path).into(imageView); 
  } 
 } 

5.2Set the2Adapter for a type - New Products Today - (implemented using GridView)

public class TodayGVAdapter extends BaseAdapter { 
 private final Context mContext; 
 private final List<WomenBean.WomenData.ModuleBean.DataBean> module1data; 
 public TodayGVAdapter(Context mContext, List<WomenBean.WomenData.ModuleBean.DataBean> module1data) { 
  this.mContext = mContext; 
  this.module1data = module1data; 
 } 
 @Override 
 public int getCount() { 
  return module1data == null &63; 0 : module1data.size(); 
 } 
 @Override 
 public Object getItem(int i) { 
  return null; 
 } 
 @Override 
 public long getItemId(int i) { 
  return 0; 
 } 
 @Override 
 public View getView(int position, View convertView, ViewGroup viewGroup) { 
  ViewHolder holder; 
  if (convertView == null) { 
   //The layout of item: vertical linear, ImagView+TextView 
   convertView = View.inflate(mContext, R.layout.item_channel, null); 
   holder = new ViewHolder(); 
   holder.iv_channel = (ImageView) convertView.findViewById(R.id.iv_channel); 
   holder.tv_channel = (TextView) convertView.findViewById(R.id.tv_channel); 
   convertView.setTag(holder); 
  } else { 
   holder = (ViewHolder) convertView.getTag(); 
  } 
  //Assemble data 
  WomenBean.WomenData.ModuleBean.DataBean datasig = module1data.get(position); 
  //Use Glide to load images 
  Glide.with(mContext).load(datasig.getImg()).into(holder.iv_channel); 
  //Set text 
  holder.tv_channel.setText(datasig.getTitle()); 
  return convertView; 
 } 
 public static class ViewHolder { 
  public ImageView iv_channel; 
  public TextView tv_channel; 
 } 
} 

5.3 the3type – brand benefits – (using ImageView directly)

@Override 
 public int getItemCount() { 
  //is completed, and then change to4, now only the first3The type is temporarily written3 
  return 3; 
 } 
 @Override 
 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  if (viewType == BLACK_5_BANNER0) { 
   return new BBNViewHolder(mContext, mLayoutInflater.inflate(R.layout.banner_viewpager, null)); 
  } else if (viewType == TODAY_NEW_GV1) { 
   return new TODAYViewHolder(mContext, mLayoutInflater.inflate(R.layout.gv_channel, null)); 
  } else if (viewType == PIN_PAI_IV2) { 
   return new PINPAIViewHolder(mContext, mLayoutInflater.inflate(R.layout.iv_pinpai, null)); 
  } 
  return null; 
 } 
 @Override 
 public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
  if (getItemViewType(position) == BLACK_5_BANNER0) { 
   BBNViewHolder bbnViewHolder = (BBNViewHolder) holder; 
   List<WomenBean.WomenData.ModuleBean.DataBean> module0data = moduleBeanList.get(0).getData(); 
   bbnViewHolder.setData(module0data); 
  } else if (getItemViewType(position) == TODAY_NEW_GV1) { 
   TODAYViewHolder todayViewHolder = (TODAYViewHolder) holder; 
   List<WomenBean.WomenData.ModuleBean.DataBean> module1data = moduleBeanList.get(1).getData(); 
   todayViewHolder.setData(module1data); 
  } else if (getItemViewType(position) == PIN_PAI_IV2) { 
   PINPAIViewHolder pinpaiViewHolder = (PINPAIViewHolder) holder; 
   List<WomenBean.WomenData.ModuleBean.DataBean> pinpai2data = moduleBeanList.get(2).getData(); 
   pinpaiViewHolder.setData(pinpai2data); 
  } 
 } 
 class PINPAIViewHolder extends RecyclerView.ViewHolder { 
  private final Context mContext; 
  @Bind(R.id.iv_new_chok) 
  ImageView ivNewChok; 
  PINPAIViewHolder(Context mContext, View itemView) { 
   super(itemView); 
   this.mContext = mContext; 
   ButterKnife.bind(this, itemView); 
   ivNewChok = (ImageView) itemView.findViewById(R.id.iv_new_chok); 
  } 
  public void setData(List<WomenBean.WomenData.ModuleBean.DataBean> pinpai2data) { 
   //Use Glide to load images 
   Glide.with(mContext) 
     .load(pinpai)2data.get(0).getImg()) 
     .diskCacheStrategy(DiskCacheStrategy.ALL) 
     .crossFade() //Set fade-in and fade-out effects, default300ms, can pass parameters 
     .into(ivNewChok); 
  } 
 } 

5.4Set the4type - matching trend - (implemented using RecyclerView) adapter

@Override 
 public int getItemCount() { 
  //All four types have been completed, return4 
  return 4; 
 } 
 @Override 
 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  if (viewType == BLACK_5_BANNER0) { 
   return new BBNViewHolder(mContext, mLayoutInflater.inflate(R.layout.banner_viewpager, null)); 
  } else if (viewType == TODAY_NEW_GV1) { 
   return new TODAYViewHolder(mContext, mLayoutInflater.inflate(R.layout.gv_channel, null)); 
  } else if (viewType == PIN_PAI_IV2) { 
   return new PINPAIViewHolder(mContext, mLayoutInflater.inflate(R.layout.iv_pinpai, null)); 
  } else if (viewType == DAPEIQS_GV3) { 
   //Layout: vertical linear, TextView+RecyclerView 
   return new DaPeiViewHolder(mContext, mLayoutInflater.inflate(R.layout.dapeiqs_rv, null)); 
  } 
  return null; 
 } 
 @Override 
 public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
  if (getItemViewType(position) == BLACK_5_BANNER0) { 
   BBNViewHolder bbnViewHolder = (BBNViewHolder) holder; 
   List<WomenBean.WomenData.ModuleBean.DataBean> module0data = moduleBeanList.get(0).getData(); 
   bbnViewHolder.setData(module0data); 
  } else if (getItemViewType(position) == TODAY_NEW_GV1) { 
   TODAYViewHolder todayViewHolder = (TODAYViewHolder) holder; 
   List<WomenBean.WomenData.ModuleBean.DataBean> module1data = moduleBeanList.get(1).getData(); 
   todayViewHolder.setData(module1data); 
  } else if (getItemViewType(position) == PIN_PAI_IV2) { 
   PINPAIViewHolder pinpaiViewHolder = (PINPAIViewHolder) holder; 
   List<WomenBean.WomenData.ModuleBean.DataBean> pinpai2data = moduleBeanList.get(2).getData(); 
   pinpaiViewHolder.setData(pinpai2data); 
  } else if (getItemViewType(position) == DAPEIQS_GV3) { 
   DaPeiViewHolder dapeiViewHolder = (DaPeiViewHolder) holder; 
   List<WomenBean.WomenData.ModuleBean.DataBean> dapeiqs6data = moduleBeanList.get(6).getData(); 
   dapeiViewHolder.setData(dapeiqs6data); 
  } 
 } 
 class DaPeiViewHolder extends RecyclerView.ViewHolder { 
  private final Context mContext; 
  private RecyclerView dapeiqs_rv; 
  public DaPeiViewHolder(Context mContext, View itemView) { 
   super(itemView); 
   this.mContext = mContext; 
   dapeiqs_rv = (RecyclerView) itemView.findViewById(R.id.dapeiqs_rv); 
  } 
  public void setData(List<WomenBean.WomenData.ModuleBean.DataBean> dapeiqs6data) { 
   //1.Existing data 
   //2.Set adapter 
   DaPeiQSRecycleViewAdapter adapter = new DaPeiQSRecycleViewAdapter(mContext, dapeiqs)6data); 
   dapeiqs_rv.setAdapter(adapter); 
   //The recycle view must be set with both an adapter and a layout manager; otherwise, the images will not be displayed. 
   LinearLayoutManager manager = new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false); 
   dapeiqs_rv.setLayoutManager(manager); 
  } 
 } 
public class DaPeiQSRecycleViewAdapter extends RecyclerView.Adapter { 
 private final Context mContext; 
 private final List<WomenBean.WomenData.ModuleBean.DataBean> dapeiqs6data; 
 public DaPeiQSRecycleViewAdapter(Context mContext, List<WomenBean.WomenData.ModuleBean.DataBean> dapeiqs6data) { 
  this.mContext = mContext; 
  this.dapeiqs6data = dapeiqs6data; 
 } 
 @Override 
 public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
  return new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_dapeiqs, null)); 
 } 
 @Override 
 public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
  MyViewHolder myViewHolder = (MyViewHolder) holder; 
  myViewHolder.setData(position); 
 } 
 @Override 
 public int getItemCount() { 
  return dapeiqs6data.size(); 
 } 
 class MyViewHolder extends RecyclerView.ViewHolder { 
  private ImageView iv_figure; 
  public MyViewHolder(View itemView) { 
   super(itemView); 
   iv_figure = (ImageView) itemView.findViewById(R.id.iv_figure); 
  } 
  public void setData(int position) { 
   WomenBean.WomenData.ModuleBean.DataBean dapeiBean = dapeiqs6data.get(position); 
   //Use Glide to load images 
   Glide.with(mContext) 
     .load(dapeiBean.getImg()) 
     .into(iv_figure); 
  } 
 } 
} 

That's all for this article. Hope it helps with your studies and that you all support the Yana Tutorial.

Declaration: The content of this article is from the Internet, the copyright belongs to the original author. The content is contributed and uploaded by Internet users spontaneously. This website does not own the copyright, has not been manually edited, and does not assume relevant legal liability. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (Please replace # with @ when sending an email for reporting. Provide relevant evidence, and once verified, this site will immediately delete the content suspected of infringement.)

You May Also Like