The use of the Android 5.0 V7 Expansion Pack Recyclerview and the encapsulation implementation of the Universal adapter

Source: Internet
Author: User

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

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.