Add Gradle Dependency
' com.android.support:appcompat-v7:23.2.1 '
' com.android.support:recyclerview-v7:23.2.1 '
Note: The version number of Recyclerview is consistent with AppCompat, here: v7:23.2.1 defines generic recyclerviewhold objects in a generic manner, and internally sparsearray the view object to improve the parsing speed of the XML.
/**
* Created by Administrator on 2016/6/14.
* General Recycler.viewholder
*/
Public classUnityrecycleradapterviewholderextendsRecyclerview.viewholder {
private static FinalUtilslogLG= Utilslog.GetLogger(Unityrecycleradapterviewholder.class);
PrivateSparsearray<view>mviews;
PrivateViewMconvertview;
PublicUnityrecycleradapterviewholder (View Itemview, ViewGroup parent) {
Super(Itemview);
This.Mconvertview= Itemview;
This.mviews=NewSparsearray<> ();
}
PublicViewGetconvertitemview() {
returnMconvertview;
}
/**
* Get control by Viewid
*
* @paramviewId
* @return
*/
Public<TextendsView>TGenerateview(intVIEWID) {
View view =mviews. Get (ViewId);
if(View = =NULL) {
View =Mconvertview. Findviewbyid (ViewId);
mviews. put (ViewId, View;
}
return(T) View;
}
Public<TextendsView>TGenerateview(intViewId, class<T> Clz) {
return(T) Generateview (VIEWID);
}
}
rewrite Oncreateviewholder with Onbindviewholder, whereOncreateviewholder generates a View object for each item and wraps it back into the Viewholder;Onbindviewholder is responsible for rendering the data to view
/**
* Created by Administrator on 2016/6/15.
* Recycler.adapter base class
* 1.getItemLayoutId and Getitemlayoutview Choose one of the two to make a carbon copy: Support layout and code mode here
* 2. The class can also continue to expand, for cases where there is only a single layout, you can inject itemlayoutid directly through the construction method
*/
Public abstract classabsunitybaserecycleradapter<T>extendsRecyclerview.adapter<unityrecycleradapterviewholder>ImplementsInotifyadapterdatasetchange {
private static FinalUtilslogLG= Utilslog.GetLogger(Absunitybaserecycleradapter.class);
Privateiadapterdatamodifyhelper<T>Iadapteratamodifyhelper;//helper class for manipulating data
PrivateLayoutinflaterLayoutinflater;
PublicAbsunitybaserecycleradapter () {
This.Iadapteratamodifyhelper=NewDatamodifyhelper<> ();
}
Publiciadapterdatamodifyhelper<T>Getdatamodifyhelper() {
This.Iadapteratamodifyhelper. Setnotifyadapterdatasetchange ( This);
returnIadapteratamodifyhelper;
}
/ * System override function */
@Override
PublicUnityrecycleradapterviewholderOncreateviewholder(ViewGroup Parent, intViewType) {
LG. E ("Oncreateviewholder");
if( This.Layoutinflater==NULL) {
This.Layoutinflater= Layoutinflater. from(Parent.getcontext ());
}
return newUnityrecycleradapterviewholder (Getitemlayoutview (ViewType), Parent;
}
@Override
Public voidOnbindviewholder(Unityrecycleradapterviewholder Holder, intPosition) {
LG. E ("Onbindviewholder with postion["+ Position +"]:" + holder.tostring ());
ConvertIadapteratamodifyhelper. Getdataresources (). Get (position), Holder, Position;
}
@Override
public intGetItemCount() {
returnIadapteratamodifyhelper. getdataresources (). Size ();
}
/**
* Fill Data
*
* @paramViewholder
* @paramposition
*/
Public abstract voidConvert(TItementity, Unityrecycleradapterviewholder Viewholder, intPosition;
/**
* return layout ID via Itemviewtype
*
* @paramViewType
* @return
*/
public intGetitemlayoutid(intViewType) {
return0;
}
/**
* Returns the specified item layout via ViewType
*
* @paramViewType
* @return
*/
PublicViewGetitemlayoutview(intViewType) {
returnLayoutinflater. Inflate (Getitemlayoutid (ViewType), NULL);
}
@Override
Public voidNotifyadapter() {
Notifydatasetchanged ();
}
}
The specific use is as follows,
Adapter=NewSingleitemrecycleradapter<corepageentity> (r.layout.Simple_item_horizontal) {
@Override
Public voidConvert(Corepageentity itementity, Unityrecycleradapterviewholder Viewholder, intPosition) {
if(Position! =0) {
LG. E ("Convert with position"+ Position +":" + viewholder.tostring ());
}
Viewholder.generateview (r.id.Imgitemcommon, ImageView.class). Setvisibility (View.GONE);
Viewholder.generateview (r.id.Tvitemcommon, TextView.class). SetText (Itementity.getcorepagetitle ());
}
};
Gridactmain. Setadapter (Adapter);
Gridactmain. Setlayoutmanager (NewGridlayoutmanager (Getcuractivity (), 1));
Adapter. Getdatamodifyhelper (). Setdataresource (//Add data Set);
Source Link:Https://github.com/xiaoxuan948/AndroidUnityLab/tree/master/unity_base_dev_helper/src/main/java/com/coca/unity_ Base_dev_helper/adapter/recycler_view extended features include refreshing, adding a kinsoku layout, seeHttp://m.blog.csdn.net/article/details?plg_nld=1&id=51153978&plg_auth=1&plg_uin=1&plg_usr=1 &plg_vkey=1&plg_nld=1&plg_dev=1 # Subsequent Add Onitemclicklistener event
From for notes (Wiz)
The use of the Android 5.0 V7 Expansion Pack Recyclerview and the encapsulation implementation of the Universal adapter