Sometimes a checkbox needs to be built in the listview of the project for the user to choose, select multiple, delete, and so on.
First look at the source code
Dataitem. Java
package com.example.checkboxdemo;public class DataItem {private String title;private boolean flag;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public boolean getFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}}
Myadapter. Java
package com.example.checkboxdemo;import java.util.ArrayList;import java.util.HashMap;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.TextView;import com.example.checkboxdemo.MainActivity.ViewHolder;public class MyAdapter extends BaseAdapter {public ArrayList<DataItem> mVideoList;private Context context;private LayoutInflater mInflater = null;public MyAdapter(Context context, ArrayList<DataItem> list){this.context = context;this.mVideoList = list;mInflater = LayoutInflater.from(context);}@Overridepublic int getCount() {return mVideoList.size();}@Overridepublic Object getItem(int position) {return mVideoList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder mHolder = null;if(null == convertView){mHolder = new ViewHolder();convertView = mInflater.inflate(R.layout.test_item, null);mHolder.mTitle = (TextView)convertView.findViewById(R.id.item_tv);mHolder.mCheck = (CheckBox)convertView.findViewById(R.id.item_cb);convertView.setTag(mHolder);}else{mHolder = (ViewHolder)convertView.getTag();}mHolder.mTitle.setText(mVideoList.get(position).getTitle());mHolder.mCheck.setChecked(mVideoList.get(position).getFlag());return convertView;}}
Mainactivity. Java
Package COM. example. checkboxdemo; import Java. util. arraylist; import Java. util. hashmap; import android. app. activity; import android. OS. bundle; import android. view. view; import android. view. view. onclicklistener; import android. widget. adapterview; import android. widget. adapterview. onitemclicklistener; import android. widget. button; import android. widget. checkbox; import android. widget. listview; import android. WID Get. textview; import android. widget. toast; public class mainactivity extends activity {private listview mvideoview; private myadapter madapter; private arraylist <dataitem> mvideolist; private button mcheckallbtn; private button muncheckallbtn; private button mcancelbtn; private button secret; string STR [] = {"item0", "Item1", "item2", "item3", "item4", "item5", "item6", "item7 ", "item8", "item9", "item10", "I Tem11 "," item12 "}; @ overrideprotected void oncreate (bundle savedinstancestate) {super. oncreate (savedinstancestate); setcontentview (R. layout. activity_main); initviews (); initlisteners ();} private void initviews () {mvideoview = (listview) findviewbyid (R. id. LV); mcheckallbtn = (button) findviewbyid (R. id. checkall); muncheckallbtn = (button) findviewbyid (R. id. uncheckall); mcancelbtn = (button) findviewbyid (R. id. canc Elcheck); mdeleteitembtn = (button) findviewbyid (R. id. deleteitem); mvideolist = new arraylist <dataitem> (); initdata ();} private void initdata () {for (INT I = 0; I <Str. length; I ++) {dataitem item = new dataitem (); item. settitle (STR [I]); item. setflag (false); mvideolist. add (item);} madapter = new myadapter (this, mvideolist); mvideoview. setadapter (madapter);} private void initlisteners () {mcheckallbtn. setonclickli Stener (New onclicklistener () {@ overridepublic void onclick (view v) {for (INT I = 0; I <mvideolist. size (); I ++) {mvideolist. get (I ). setflag (true);} madapter. notifydatasetchanged () ;}}); muncheckallbtn. setonclicklistener (New onclicklistener () {@ overridepublic void onclick (view v) {for (INT I = 0; I <mvideolist. size (); I ++) {mvideolist. get (I ). setflag (false);} madapter. notifydatasetchanged () ;}}); mcancelbtn. s Etonclicklistener (New onclicklistener () {@ overridepublic void onclick (view v) {for (INT I = 0; I <mvideolist. size (); I ++) {If (mvideolist. get (I ). getflag () {mvideolist. get (I ). setflag (false);} else {mvideolist. get (I ). setflag (true) ;}} madapter. notifydatasetchanged () ;}}); mdeleteitembtn. setonclicklistener (New onclicklistener () {@ overridepublic void onclick (view v) {/*** you cannot directly operate on mvideolist here. You need to cache it to a list to clear it. Otherwise */Arraylist <dataitem> deletelist = new arraylist <dataitem> (); For (INT I = 0; I <mvideolist. size (); I ++) {If (mvideolist. get (I ). getflag () {deletelist. add (mvideolist. get (I) ;}} mvideolist. removeall (deletelist); deletelist. clear (); madapter. notifydatasetchanged () ;}}); mvideoview. setonitemclicklistener (New onitemclicklistener () {@ overridepublic void onitemclick (adapterview <?> Parent, view, int position, long ID) {viewholder holder = (viewholder) view. gettag (); // change the status of the checkbox holder. mcheck. toggle (); madapter. mvideolist. get (position ). setflag (holder. mcheck. ischecked () ;}}) ;}static class viewholder {public textview mtitle; Public checkbox mcheck ;}}
Note the following item checkbox definition. If three lines of code are not added in red, onitemclicklistener will become invalid.
Test_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" > <TextView android:id="@+id/item_tv" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_weight="1" android:gravity="center_vertical" /> <CheckBox android:id="@+id/item_cb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:gravity="center_vertical" /></LinearLayout>
Not much said, all in the Code, there is a picture of the truth