Implementation code
Adapter's Code
Where: Viewholder is three different layouts, namely the layout of each item in the ListView
There are three types of type_1.
In the use of different layouts, getitemviewtype and getviewtype can not be less, generally not the two functions of the overloaded
classRunrankadapter extends Baseadapter {ArrayListls; Context Mcontext; LinearLayout LinearLayout=NULL; Layoutinflater Inflater; TextView Tex; FinalintView_type =3; FinalintType_1 =0; Finalinttype_2 =1; FinalintType_3 =2; PublicRunrankadapter (Context context, ArrayListlist) {ls=list; Mcontext=context; } @Override Public intGetCount () {returnls.size (); } @Override PublicObject GetItem (intposition) { returnLs.Get(position); } @Override Public LongGetitemid (intposition) { return 0; } //Each convert view calls this method to get the currently required view style@Override Public intGetitemviewtype (intposition) { intp =position; if(p = =0) returntype_1; Else if(p = =1) returntype_2; Else returnType_3; } @Override Public intGetviewtypecount () {return 3; } @Override PublicView GetView (intposition, View Convertview, ViewGroup parent) {ViewHolder1 Holder1=NULL; ViewHolder2 Holder2=NULL; ViewHolder3 Holder3=NULL; intType =Getitemviewtype (position); if(Convertview = =NULL) {Inflater= Layoutinflater. from(Mcontext); //determine the layout of new by the current desired style Switch(type) { CaseType_1:convertview=Inflater.inflate (R.LAYOUT.ITEM_RUNRANK1, parent,false); Holder1=NewViewHolder1 (); Holder1.rank1=(TextView) convertview. Findviewbyid (R.id.tv_list1_rank); Holder1.time1=(TextView) convertview. Findviewbyid (R.id.tv_list1_time); Convertview.settag (Holder1); Break; CaseType_2:convertview=Inflater.inflate (R.LAYOUT.ITEM_RUNRANK2, parent,false); Holder2=NewViewHolder2 (); Holder2.rank2=(TextView) convertview. Findviewbyid (R.id.tv_list2_rank); Holder2.time2=(TextView) convertview. Findviewbyid (R.id.tv_list2_time); Convertview.settag (HOLDER2); Break; CaseType_3:convertview=Inflater.inflate (R.layout.item_runrank3, parent,false); Holder3=NewViewHolder3 (); Holder3.rank3=(TextView) convertview. Findviewbyid (R.id.tv_list3_rank); Holder3.time3=(TextView) convertview. Findviewbyid (R.id.tv_list3_time); Convertview.settag (HOLDER3); Break; default: Break; } } Else { Switch(type) { CaseType_1:holder1=(ViewHolder1) Convertview.gettag (); Break; CaseType_2:holder2=(ViewHolder2) Convertview.gettag (); Break; CaseType_3:holder3=(ViewHolder3) Convertview.gettag (); Break; } } //Set up Resources Switch(type) { CaseTYPE_1:holder1.rank1.setText (""+ (position +1)); Holder1.time1.setText (LS.Get(position).Get(" Time"). toString ()); Break; CaseTYPE_2:holder2.rank2.setText (""+ (position +1)); Holder2.time2.setText (LS.Get(position).Get(" Time"). toString ()); Holder2.totaldistance2.setText (LS.Get(position) Break; CaseTYPE_3:holder3.rank3.setText (""+ (position +1)); Holder3.time3.setText (LS.Get(position).Get(" Time"). toString ()); Break; } returnConvertview; } Public classViewHolder1 {TextView rank1; TextView time1; } Public classViewHolder2 {TextView rank2; TextView time2; } Public classViewHolder3 {TextView rank3; TextView Time3; } }
How to use:
Declare and define your own adapter, set his adapter in the ListView
Private Runrankadapter Runrankadapter; ArrayList runrank; New Arraylist(); New Runrankadapter (this, Runrank); = (ListView) Findviewbyid (R.id.lv_runrank); Lv_runrank.setadapter (runrankadapter);
Each item in the Android ListView has a different layout