开源中文网

您的位置: 首页 > Android开发 > 正文

Android在listview添加checkbox实现原理与代码

来源: 网络整理  作者: 佚名

Android在listview添加checkbox如何实现一直都是新手朋友们的头疼问题,接下来为您详细介绍实现方法:

主界面CheckBoxinListViewActivity.java代码如下: 

代码如下:

public class CheckBoxinListViewActivity extends Activity { 
/** Called when the activity is first created. */ 
private MyAdapter adapter; 
private ListView listview; 
private Button checkAll; 
private Button noCheckAll; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
listview = (ListView)findViewById(R.id.listview); 
checkAll = (Button)findViewById(R.id.button1); 
noCheckAll = (Button)findViewById(R.id.button2); 
adapter = new MyAdapter(); 
listview.setAdapter(adapter); 
checkAll.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
adapter.checkAll(); 

}); 
noCheckAll.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
adapter.noCheckAll(); 

}); 

private class MyAdapter extends BaseAdapter{ 
private ArrayList<Message> list= new ArrayList<Message>(); 
public MyAdapter(){ 
for(int i = 1 ;i<=100 ; i++){ 
list.add(new Message("item_"+i)); 


public void checkAll(){ 
for(Message msg:list){ 
msg.isCheck = true; 

notifyDataSetChanged(); 

public void noCheckAll(){ 
for(Message msg:list){ 
msg.isCheck = false; 

notifyDataSetChanged(); 

@Override 
public int getCount() { 
return list.size(); 

@Override 
public Object getItem(int position) { 
return null; 

@Override 
public long getItemId(int position) { 
return 0; 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
ViewHolder viewHolder; 
if(convertView == null){ 
LayoutInflater inflater = LayoutInflater.from(CheckBoxinListViewActivity.this); 
convertView = inflater.inflate(R.layout.listview_item, null); 
viewHolder = new ViewHolder(); 
viewHolder.checkBox = (CheckBox)convertView.findViewById(R.id.checkBox1); 
convertView.setTag(viewHolder); 
}else{ 
viewHolder = (ViewHolder)convertView.getTag(); 

final Message msg = list.get(position); 
viewHolder.checkBox.setText(msg.str); 
viewHolder.checkBox.setChecked(msg.isCheck); 
//注意这里设置的不是onCheckedChangListener,还是值得思考一下的 
viewHolder.checkBox.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
if(msg.isCheck){ 
msg.isCheck = false; 
}else{ 
msg.isCheck = true; 


}); 
return convertView; 


private class ViewHolder{ 
CheckBox checkBox; 


适配器所适配的消息Message.java如下: 
代码如下:

public class Message { 
public boolean isCheck; 
public String str; 
public Message(String str){ 
this.str = str; 


main.xml代码如下: 
代码如下:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<LinearLayout 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<Button android:text="全选" android:id="@+id/button1" 
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 
<Button android:text="撤消" android:id="@+id/button2" 
android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 
</LinearLayout> 
<ListView android:id="@+id/listview" android:layout_height="fill_parent" 
android:layout_width="fill_parent" /> 
</LinearLayout> 

listview_item.xml代码如下: 
代码如下:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:descendantFocusability="blocksDescendants" 

<LinearLayout 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:gravity="center"> 
<CheckBox 
android:text="CheckBox" 
android:id="@+id/checkBox1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"/> 
</LinearLayout> 
</LinearLayout> 

Tags:原理 代码
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明