Android Recyclerview Load different layouts simple implementation _android

Source: Internet
Author: User

Objective

About the use of recyclerview here is not to repeat, I believe that a lot of online search (I also have a simple introduction of the article), this time we are talking about the use of recyclerview in the process, sometimes according to different locations load different layout of the simple realization, This is just a point of action.

Effect chart

Design ideas
• Rewrite the recyclerview.adapter getitemviewtype (int position),
In this method, different viewtype are set according to different position.
• Write a specific recyclerview.viewholder subclass (different subclasses correspond to different view or layout)
• Rewrite the Recyclerview.adapter oncreateviewholder (viewgroup parent,int ViewType)
In this method, we return a subclass of different recyclerview.viewholder according to the ViewType we set before

Code

Use Recyclerview to add dependencies

Compile ' com.android.support:recyclerview-v7:24.1.1 '

The first is mainactivity layout, very simple layout

<?xml version= "1.0" encoding= "Utf-8"?> <relativelayout xmlns:android=
  "http://" Schemas.android.com/apk/res/android "
  xmlns:tools=" Http://schemas.android.com/tools "
  android:layout_ Width= "Match_parent"
  android:layout_height= "match_parent"
  tools:context= " Com.example.hfs.recyclerviewloadlayout.MainActivity ">

  <android.support.v7.widget.recyclerview
    Android:id= "@+id/recyclerview"
    android:layout_width= "match_parent"
    android:layout_height= "Match_" Parent "/>
</RelativeLayout>

And then the mainactivity code.

Package com.example.hfs.recyclerviewloadlayout;
Import android.support.v7.app.AppCompatActivity;
Import Android.os.Bundle;
Import Android.support.v7.widget.LinearLayoutManager;
Import Android.support.v7.widget.RecyclerView;
Import Android.view.View;

Import Android.widget.Toast;
Import java.util.ArrayList;

Import java.util.List;

  public class Mainactivity extends Appcompatactivity {private Recyclerview mrecyclerview;
    @Override protected void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate);

    Setcontentview (R.layout.activity_main);

    Initview ();
  InitData ();
    private void InitData () {list<string> Descs = new arraylist<> ();

    Descs.clear ();
    list<integer> images = new arraylist<> ();

    Images.clear (); for (int i = 1; i < i++) {Descs.add ("test data" + (I < 10?)
    "0" + i:i));
    } images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher); Images.add (r.mipmap.iC_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);
    Images.add (R.mipmap.ic_launcher);

    Images.add (R.mipmap.ic_launcher);
    Myadapter adapter = new Myadapter (mainactivity.this, Descs, images);
    Mrecyclerview.setadapter (adapter); Recyclerview.layoutmanager manager = new Linearlayoutmanager (Mainactivity.this, linearlayoutmanager.vertical, False)
    ;
    Mrecyclerview.setlayoutmanager (manager); Mrecyclerview.additEmdecoration (New Divideritemdecoration (Mainactivity.this, divideritemdecoration.vertical_list)); Adapter.setmonitemclicklistener (New Myadapter.onitemclicklistener () {@Override public void Onitemclick (View V
      iew, int position) {Toast.maketext (Mainactivity.this, "clicked" + position + "position", Toast.length_short). Show ();
  }
    });
  private void Initview () {mrecyclerview= (Recyclerview) Findviewbyid (R.id.recyclerview);

 }
}

Then our adapter

Package com.example.hfs.recyclerviewloadlayout;
Import Android.content.Context;
Import Android.support.v7.widget.RecyclerView;
Import Android.view.View;
Import Android.view.ViewGroup;
Import Android.widget.ImageView;

Import Android.widget.TextView;
Import java.util.ArrayList;

Import java.util.List;
 /** * Created by HFS on 2016/8/24.
  * * public class Myadapter extends recyclerview.adapter<recyclerview.viewholder> {private context mcontext;
  Private list<string> Descs;
  private list<integer> images;

  Private list<object> alllist;
  private static final int textview_viewtype = 1;

  private static final int imageview_viewtype = 2;
  public interface Onitemclicklistener {void Onitemclick (view view, int position);

  Private Onitemclicklistener Monitemclicklistener;
  Public Onitemclicklistener Getmonitemclicklistener () {return monitemclicklistener;
    } public void Setmonitemclicklistener (Onitemclicklistener monitemclicklistener) {This.monitemclicklistener = Monitemclicklistener; Public Myadapter (Context Mcontext, list<string> Descs, list<integer> images) {This.mcontext = Mconte
    xt
    This.descs = Descs;

    This.images = images;
    Alllist = new arraylist<> ();
    Alllist.clear ();
      for (int i = 0; i < descs.size (); i++) {Alllist.add (Descs.get (i));
    Alllist.add (Images.get (i)); @Override public Recyclerview.viewholder Oncreateviewholder (viewgroup parent, int viewtype) {Recyclerview.
    Viewholder holder = Getviewholderbyviewtype (ViewType);
  return holder; Private Recyclerview.viewholder getviewholderbyviewtype (int viewtype) {View Tv_itemview = view.inflate (mContext
    , R.LAYOUT.ITEM_TV, NULL);

    View Iv_itemview = view.inflate (mcontext, R.layout.item_iv, NULL);
    Recyclerview.viewholder holder = null;
        Switch (viewtype) {case textview_viewtype:holder = new Mytextview_viewholder (Tv_itemview);
    Break  Case Imageview_viewtype:holder = new Myimageview_viewholder (Iv_itemview);
    Break
  return holder;
    @Override public int Getitemviewtype (int position) {int viewtype =-1;
    int index = position% 2;
        Switch (index) {case 0:viewtype = Textview_viewtype;
      Break
        Case 1:viewtype = Imageview_viewtype;
    Break
  return viewtype; @Override public void Onbindviewholder (Recyclerview.viewholder holder, final int position) {if (position% 2 =
      = 0) {((mytextview_viewholder) holder). Tv.settext ((((String) alllist.get (position)); ((mytextview_viewholder) holder). View.setonclicklistener (New View.onclicklistener () {@Override public voi D OnClick (View v) {if (Monitemclicklistener!= null) {Monitemclicklistener.onitemclick (V, Position
          );

    }
        }
      }); } else {((myimageview_viewholder) holder). Iv.setimageresource ((Integer) Alllist.get (position)); ((myimageview_viewholder) holder). View.setonclicklistener (New View.onclicklistener () {@Override public vo ID OnClick (View v) {if (Monitemclicklistener!= null) {Monitemclicklistener.onitemclick (V, Positio
          n);
    }
        }
      });
  @Override public int GetItemCount () {return alllist.size ();
    Class Mytextview_viewholder extends Recyclerview.viewholder {public view view;

    Public TextView TV;
      Public Mytextview_viewholder (View Itemview) {super (Itemview);
      This.view = Itemview;
    This.tv = (TextView) Itemview.findviewbyid (r.id.tv);
    } class Myimageview_viewholder extends Recyclerview.viewholder {public view view;

    Public ImageView IV;
      Public Myimageview_viewholder (View Itemview) {super (Itemview);
      This.view = Itemview;
    THIS.IV = (ImageView) Itemview.findviewbyid (R.ID.IV);

 }
  }
}

followed by our custom divideritemdecoration

Package com.example.hfs.recyclerviewloadlayout;
Import Android.content.Context;
Import Android.content.res.TypedArray;
Import Android.graphics.Canvas;
Import Android.graphics.Rect;
Import android.graphics.drawable.Drawable;
Import Android.support.v7.widget.LinearLayoutManager;
Import Android.support.v7.widget.RecyclerView;

Import Android.view.View;
 /** * Created by HFS on 2016/8/24. * * public class Divideritemdecoration extends Recyclerview.itemdecoration {private static final int[] Attrs = new int[] {Android.

  R.attr.listdivider};

  public static final int horizontal_list = linearlayoutmanager.horizontal;

  public static final int vertical_list = linearlayoutmanager.vertical;

  Private drawable Mdivider;

  private int morientation; Public Divideritemdecoration (context context, int orientation) {Final TypedArray a = Context.obtainstyledattributes (a
    TTRS);
    Mdivider = a.getdrawable (0);
    A.recycle ();
  SetOrientation (orientation); } public void SetOrientation (int orientation) {if (Orientation!= horizontal_list && Orientation!= vertical_list) {thro
    W New IllegalArgumentException ("Invalid orientation");
  } morientation = orientation; @Override public void OnDraw (Canvas C, recyclerview parent) {if (morientation = = vertical_list) {Draw
    Vertical (c, parent);
    else {Drawhorizontal (c, parent);
    } public void Drawvertical (Canvas C, Recyclerview parent) {Final int left = Parent.getpaddingleft ();

    Final int right = Parent.getwidth ()-parent.getpaddingright ();
    Final int childcount = Parent.getchildcount ();
      for (int i = 0; i < ChildCount. i++) {final View child = Parent.getchildat (i);
      Recyclerview v = new Recyclerview (Parent.getcontext ());
      Final Recyclerview.layoutparams params = (recyclerview.layoutparams) child getlayoutparams ();
      Final int top = Child.getbottom () + Params.bottommargin; final int bottom = tOP + mdivider.getintrinsicheight ();
      Mdivider.setbounds (left, top, right, bottom);
    Mdivider.draw (c);
    } public void Drawhorizontal (Canvas C, Recyclerview parent) {Final int top = Parent.getpaddingtop ();

    final int bottom = Parent.getheight ()-Parent.getpaddingbottom ();
    Final int childcount = Parent.getchildcount ();
      for (int i = 0; i < ChildCount. i++) {final View child = Parent.getchildat (i);
      Final Recyclerview.layoutparams params = (recyclerview.layoutparams) child getlayoutparams ();
      Final int left = Child.getright () + Params.rightmargin;
      Final int right = left + mdivider.getintrinsicheight ();
      Mdivider.setbounds (left, top, right, bottom);
    Mdivider.draw (c); @Override public void Getitemoffsets (Rect outrect, int itemposition, Recyclerview parent) {if (morientatio
    n = = vertical_list) {outrect.set (0, 0, 0, mdivider.getintrinsicheight ()); else {outrect.set (0, 0,Mdivider.getintrinsicwidth (), 0);

 }
  }
}

Project Address: Https://github.com/Greathfs/RecyclerViewLoadLayout

The above is the entire content of this article, I hope to help you learn, but also hope that we support the cloud habitat community.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.