android中ListView添加CheckBox控件实现选择

     android中ListView添加CheckBox控件,类似购物车功能经常需要这种功能,全选,取消已选等等,下面这个程序是参考网上另一篇博客写出来的。该程序实现功能,全选,反选,取消已选,点击每一行选择。

效果图如下:

android中ListView添加CheckBox控件实现选择_第1张图片

首先完成布局文件:



    

    
    
    
        

一个TextView控件,要来识别选择了几项,中间是一个listview控件,最后一个水平布局实现三个按钮。该处有个地方值得学习,设置ListView控件高度为0dp,android:layout_weight="1",可以实现下面按钮不动,永远在屏幕的下方。

给出ListView控件每一行的布局:



    
    

    


每一行实现一个TextView控件和一个CheckBox控件。

下面给出功能主代码:

package com.example.checkbox;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.example.checkbox.CheckBoxAdapter.ViewCache;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{

	private TextView tvSelected;
	private Button btnAll;
	private Button btnFan;
	private Button btnCancle;
	private ListView lv;
	private List> list;
	private CheckBoxAdapter cbAdapter;
	private List listStr = new ArrayList();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		InitViews();
	}
	
	private void InitViews() {
		tvSelected = (TextView) findViewById(R.id.tvselected);
		btnAll = (Button) findViewById(R.id.btn_all);
		btnFan = (Button) findViewById(R.id.btn_fan);
		btnCancle = (Button) findViewById(R.id.btn_cancle);
		lv = (ListView) findViewById(R.id.lv);
		
		list = new ArrayList>();
		for(int i=0;i<10;i++){
			HashMap map = new HashMap();
			map.put("name", "G"+i);
			map.put("boolean", false);//初始化为未选
			list.add(map);
		}//初始化数据
		
		cbAdapter = new CheckBoxAdapter(this,list);
		lv.setAdapter(cbAdapter);
		
		lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView parent, View view,int position, long id) {
				ViewCache viewCache = (ViewCache) view.getTag();
				viewCache.cb.toggle();
				list.get(position).put("boolean", viewCache.cb.isChecked());
				
				cbAdapter.notifyDataSetChanged();
				
				if(viewCache.cb.isChecked()){//被选中状态
					listStr.add(list.get(position).get("name").toString());
				}else//从选中状态转化为未选中
				{
					listStr.remove(list.get(position).get("name").toString());
				}
				
				tvSelected.setText("已选择了:"+listStr.size()+"项");
			}
		});
		
		btnAll.setOnClickListener(this);
		btnCancle.setOnClickListener(this);
		btnFan.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_all://全选,修改值为true
			for(int i=0;i

在每次list中的数据发生改变时,需要附上:

cbAdapter.notifyDataSetChanged();

这样才能够重新刷新UI界面。

ListView添加适配器类:

package com.example.checkbox;

import java.util.HashMap;
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.CheckBox;
import android.widget.TextView;

public class CheckBoxAdapter extends BaseAdapter{

	private Context context;
	private List> list;
	private LayoutInflater layoutInflater;
	private TextView tv;
	private CheckBox cb;
	public CheckBoxAdapter(Context context,List> list) {
		this.context = context;
		this.list = list;//list中checkbox状态为false
		layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}
	
	@Override
	public int getCount() {
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		return list.get(position);
	}

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if(convertView == null){
			convertView = layoutInflater.inflate(R.layout.listview_item, null);
			
			ViewCache viewCache = new ViewCache();
			tv = (TextView) convertView.findViewById(R.id.item_tv);
			cb = (CheckBox) convertView.findViewById(R.id.cb);
			
			viewCache.tv = tv;
			viewCache.cb = cb;
			convertView.setTag(viewCache);
		}else
		{
			ViewCache viewCache = (ViewCache) convertView.getTag();
			tv = viewCache.tv;
			cb = viewCache.cb;
		}
		
		tv.setText(list.get(position).get("name")+"");
		cb.setChecked((Boolean) list.get(position).get("boolean"));
		return convertView;
	}

	public class ViewCache{
		TextView tv;
		CheckBox cb;
	}
}

注:参考博客http://yangshen998.iteye.com/blog/1310183

代码另外就不给了,已经全部粘上去了。


你可能感兴趣的:(Android控件)