The main implementation of this article is to add a CheckBox control to a custom ListView layout, and to determine whether a checkbox is selected by the user to perform the appropriate action on the selected item of the ListView. Use a demo to show the feature, select an item in the ListView, and then click the button to show which items are selected.
[1] The program structure diagram is as follows:
Where Person.java is an entity class, Mainactivity.java is the activity component class. Listitem.xml is a custom list for each layout file.
[2] listitem.xml layout File source code is as follows:
<?XML version= "1.0" encoding= "Utf-8"?><LinearLayoutxmlns:android= "Http://schemas.android.com/apk/res/android"android:orientation= "vertical"Android:layout_width= "Fill_parent"Android:layout_height= "Fill_parent"> <LinearLayoutAndroid:layout_width= "Fill_parent"Android:layout_height= "Wrap_content"android:orientation= "Horizontal"android:descendantfocusability= "Blocksdescendants"> <CheckBoxAndroid:id= "@+id/list.select"Android:layout_width= "Wrap_content"Android:layout_height= "Wrap_content"/> <TextViewAndroid:id= "@+id/list.name"Android:layout_width= "Fill_parent"Android:layout_height= "Wrap_content"Android:layout_weight= "1"Android:text= "Name"android:layout_gravity= "Center"android:textsize= "20DP"Android:layout_marginleft= "10DP"/> <TextViewAndroid:id= "@+id/list.address"Android:layout_width= "Fill_parent"Android:layout_height= "Wrap_content"Android:layout_weight= "1"Android:text= "Address"android:layout_gravity= "Center"android:textsize= "20DP"/> </LinearLayout></LinearLayout>
[3] main.xml layout File source code is as follows:
<?XML version= "1.0" encoding= "Utf-8"?><LinearLayoutxmlns:android= "Http://schemas.android.com/apk/res/android"android:orientation= "vertical"Android:layout_width= "Fill_parent"Android:layout_height= "Fill_parent"> <ButtonAndroid:id= "@+id/show"Android:layout_width= "Fill_parent"Android:layout_height= "Wrap_content"Android:text= "Show"/> <ListViewAndroid:id= "@+id/lvperson"Android:layout_width= "Fill_parent"Android:layout_height= "Fill_parent"/></LinearLayout>
[4] Person.java entity class source code is as follows:
PackageCom.andyidea.bean; Public classPerson {PrivateString name; PrivateString address; PublicString GetName () {returnname; } Public voidsetName (String name) { This. Name =name; } PublicString getaddress () {returnaddress; } Public voidsetaddress (String address) { This. Address =address; } }
[5] Mainactivity.java class source code is as follows:
PackageCom.andyidea.listview;Importjava.util.ArrayList;ImportJava.util.HashMap;Importjava.util.List;ImportCom.andyidea.bean.Person;Importandroid.app.Activity;ImportAndroid.app.AlertDialog;ImportAndroid.content.Context;ImportAndroid.os.Bundle;ImportAndroid.util.Log;ImportAndroid.view.LayoutInflater;ImportAndroid.view.View;ImportAndroid.view.ViewGroup;ImportAndroid.widget.BaseAdapter;ImportAndroid.widget.Button;ImportAndroid.widget.CheckBox;ImportAndroid.widget.ListView;ImportAndroid.widget.TextView; Public classMainactivityextendsActivity {Button show; ListView LV; List<Person> persons =NewArraylist<person>(); Context Mcontext; Mylistadapter adapter; List<Integer> Listitemid =NewArraylist<integer>(); /**Called when the activity is first created.*/@Override Public voidonCreate (Bundle savedinstancestate) {Super. OnCreate (savedinstancestate); Setcontentview (R.layout.main); Mcontext=Getapplicationcontext (); Show=(Button) Findviewbyid (r.id.show); LV=(ListView) Findviewbyid (R.id.lvperson); Initpersondata (); Adapter=Newmylistadapter (persons); Lv.setadapter (adapter); Show.setonclicklistener (NewView.onclicklistener () {@Override Public voidOnClick (View v) {listitemid.clear (); for(intI=0;i<adapter.mchecked.size (); i++){ if(Adapter.mChecked.get (i)) {listitemid.add (i); } } if(Listitemid.size () ==0) {Alertdialog.builder builder1=NewAlertdialog.builder (mainactivity. This); Builder1.setmessage ("No Records selected"); Builder1.show (); }Else{StringBuilder SB=NewStringBuilder (); for(intI=0;i<listitemid.size (); i++) {sb.append ("Itemid=" +listitemid.get (i) + ". "); } alertdialog.builder Builder2=NewAlertdialog.builder (mainactivity. This); Builder2.setmessage (Sb.tostring ()); Builder2.show (); } } }); } /*** Simulation Data*/ Private voidInitpersondata () {person Mperson; for(inti=1;i<=12;i++) {Mperson=NewPerson (); Mperson.setname ("Andy" +i); Mperson.setaddress ("GuangZhou" +i); Persons.add (Mperson); } } //Customizing the ListView adapter classMylistadapterextendsbaseadapter{List<Boolean>mchecked; List<Person>Listperson; HashMap<Integer,View> map =NewHashmap<integer,view>(); PublicMylistadapter (list<person>list) {Listperson=NewArraylist<person>(); Listperson=list; Mchecked=NewArraylist<boolean>(); for(intI=0;i<list.size (); i++) {Mchecked.add (false); }} @Override Public intGetCount () {returnlistperson.size (); } @Override PublicObject GetItem (intposition) { returnListperson.get (position); } @Override Public LongGetitemid (intposition) { returnposition; } @Override PublicView GetView (intposition, View Convertview, ViewGroup parent) {View view; Viewholder Holder=NULL; if(Map.get (position) = =NULL) {LOG.E ("Mainactivity", "Position1 =" +position); Layoutinflater Minflater=(Layoutinflater) mcontext. Getsystemservice (Context.layout_inflater_service); View= Minflater.inflate (R.layout.listitem,NULL); Holder=NewViewholder (); Holder.selected=(CheckBox) View.findviewbyid (r.id.list_select); Holder.name=(TextView) View.findviewbyid (r.id.list_name); Holder.address=(TextView) View.findviewbyid (r.id.list_address); Final intp =position; Map.put (position, view); Holder.selected.setOnClickListener (NewView.onclicklistener () {@Override Public voidOnClick (View v) {CheckBox CB=(CheckBox) v; Mchecked.set (P, cb.ischecked ()); } }); View.settag (holder); }Else{LOG.E ("Mainactivity", "Position2 =" +position); View=Map.get (position); Holder=(Viewholder) View.gettag (); } holder.selected.setChecked (Mchecked.get (position)); Holder.name.setText (Listperson.get (position). GetName ()); Holder.address.setText (Listperson.get (position). GetAddress ()); returnview; } } Static classviewholder{CheckBox selected; TextView name; TextView address; }}
[6] The results of the program after operation are as follows:
The ListView in Android determines the selected item with a checkbox