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.