MU Class Network Universal Adapter Learning Notes

Source: Internet
Author: User

First of all, thank you again for the technology of the network, Daniel shared the course.

A. Traditional mode of the ListView adapter: 1. Create a ListView and create the item layout for the ListView 2. Encapsulating Data 3. Create a specific adapter for the item layout for data presentation. (In this process, if there are too many controls in a ListView item, the life and invocation of the control will cause the code to rise, and if there are many places in an app that need to be used in a ListView, writing multiple adapters separately can lead to many repetitive operations, In order to avoid this situation, make coding easier, you can refer to Mu-class network Android Universal adapter writing. )。

The traditional adapter coding style is as follows:

Package com.imooc.imooc_adapter;import java.util.list;import android.content.context;import  android.view.layoutinflater;import android.view.view;import android.view.viewgroup;import  android.widget.BaseAdapter;import android.widget.TextView;public class MyAdapter  extends baseadapter {    private context context;     private list<bean> mlist;    public myadapter (Context  context, list<bean> mlist)  {        super ();         this.context = context;         this.mlist = mlist;    }         public list<bean> getmlist ()  {         return mlist;  &nbsP; }    public void setmlist (list<bean> mlist)  {         this.mlist = mlist;    }      @Override     public int getcount ()  {         return mlist.size ();    }     @Override     public object getitem (int arg0)  {         return mlist.get (arg0);    }     @Override      public long getitemid (int arg0)  {         return arg0;    }     @Override      public view getview (int position, view convertview, viewgroup parent)  {        viewholer holder =null;        if  (convertview ==null)  {            holder  = new viewholer ();             convertview =  (Layoutinflater)  context                     .getsystemservice (Context.LAYOUT_INFLATER_ SERVICE))                      .inflate (R.layout.item, parent,false);             holder.name=  (TextView)  convertview.findviewbyid (r.id.name);             holder.phone =  (TextView)   Convertview.findviewbyid (R.ID.PHone);             convertview.settag (holder);         }else{             convertview.settag (Holder);        }         final bean bean = mlist.get (position);         holder.name.settext (Bean.getusername ());         holder.phone.settext (Bean.getphone ());         return  convertView;    }    class ViewHoler{         textview name;        textview  phone;    }    }

The universal adapter code is as follows:

Package com.imooc.imooc_adapter; Import java.util.List; Import Android.content.Context; Import Com.imooc.util.commonadapter;import Com.imooc.util.ViewHolder; public class Newadapter extends commonadapter<bean>{public newadapter (context context, list<bean> Mdatas,    int layoutid) {Super (context, mdatas,layoutid); } @Override public void convert (Viewholder holder, bean Bean) {holder.settext (R.id.phone, Bean.getphone ()). s    Ettext (R.id.name, Bean.getusername ()); } }

This shows that the universal adapter can be reduced the amount of code.

The universal adapter encapsulates user-defined Viewholder and Baseadapter declarations, and calls Commonadapter and Viewholer two classes.

Universal Adapter Authoring Logic:

1. Package Viewholder, free the view Convertview, implement a code to complete the instantiation of the Convertview:

Viewholder holder = Viewholder.get (Mcontext, Convertview, parent, postion, LayoutID);

Implementation method:

public class viewholder {    private sparsearray<view>  Mviews;    private context mcontext;    private view  mConvertView;    private int mposition;      Public view getmconvertview ()  {        return  Mconvertview;    }         public int  getmposition ()  {        return mposition;     }     public viewholder (context context, viewgroup  Parent, int layoutid,            int  position)  {        this.mposition = position;       &nbsP; this.mviews = new sparsearray<view> ();         mconvertview = layoutinflater.from (context). Inflate (layoutid, parent,                 false);         mconvertview.settag (This);    }      Public static viewholder get (context context, view convertview,             viewgroup parent, int position,  int layoutid)  {        if  (convertview ==  null)  {            return new  viewholder (context, parent, layoutid, position);         } else {            viewholder holder =  (ViewHolder)  convertview.gettag ();             holder.mposition = position;             return holder;        }    }          public <t extends view> t getview (int &NBSP;VIEWID)  {        view view = mviews.get ( Viewid);        if  (view == null)  {             view = mconvertview.findviewbyid (Viewid) ;             mviews.put (Viewid, view);         }        return  (T)  view;    } 

The use of Sparearray here is similar to the:list<int,object> form of storage, to compare hashmap<int,object> to save time and improve efficiency.

To create an abstract class Commonadapter:

public abstract class commonadapter<t> extends baseadapter {     protected Context mcontext;    protected List<T>  Mdatas;    protected layoutinflater minlater;    private  int layoutid;    public commonadapter (context context ,list<t > datas,int layoutid)  {        this.mcontext =  context;        this.mDatas= datas;         this.layoutId = layoutId;         Minlater = layoutinflater.from (context);    }               public context getmcontext ()  {       &nbSp; return mcontext;    }      public void  setmcontext (Context mcontext)  {        this.mcontext  = mcontext;    }      public List<T>  getmdatas ()  {        return mDatas;     }      public void setmdatas (List<t> mdatas)  {         this.mDatas = mDatas;    }        @Override     public int getcount ()  {         return mdatas.size ();    }       @Override     public t getitem (int arg0)  {       &nbSp; return mdatas.get (arg0);    }      @Override      public long getitemid (int arg0)  {         return arg0;    }      @Override      public  view getview (Int postion, view convertview, viewgroup  parent) {        viewholder holder =  Viewholder.get (Mcontext, convertview, parent, postion, layoutid);         convert (Holder, getitem (postion));         return holder.getmconvertview ();    };    public  Abstract void convert (viewholder holder,t t);}

Open the Convert method to the developer for a simple assignment operation.

Inherit the Commonadapter in the custom adapter:

public class Newadapter extends commonadapter<bean>{public newadapter (context context, list<bean> Mdatas,    int layoutid) {Super (context, mdatas,layoutid); } @Override public void convert (Viewholder holder, bean Bean) {holder.settext (R.id.phone, Bean.getphone ()). s    Ettext (R.id.name, Bean.getusername ()); }}

When you initialize a custom adapter in mainactivity, you can use:

adapter= New Newadapter (Getapplicationcontext (), Mlist,r.layout.item);

Where you can encapsulate the operation of the control in the Viewholder package class (depending on your individual needs) adapter

Public Viewholder setText (int viewId, String text) {TextView TV = GetView (viewId);        Tv.settext (text);    return this;        }public viewholder setimageresource (int viewid,int resId) {ImageView img= getView (viewId);        Img.setimageresource (RESID);            return this; }


MU Class Network Universal Adapter Learning Notes

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.