GridView实现多选

原创 2015年11月17日 15:42:40

这是GridView实现多选的小demo,我自己的项目中取出来的,群上面有人在要,所以写一下,直接代码,代码里面有注释,这里不多说,先看效果图,再看代码


public class GvselectClassAdapter extends BaseAdapter{

	private android.widget.AbsListView.LayoutParams layoutParams;
	private List<Itembean> lists;
	
	private Context context = null;
	/**
	 * CheckBox 是否选择的存储集合,key 是 position , value 是该position是否选中
	 */
	private Map<Integer, Boolean> isCheckMap = new HashMap<Integer, Boolean>();
	public GvselectClassAdapter(Context context,List<Itembean> list) {
		this.context = context;
		this.lists = list;
		// 初始化,默认都没有选中
		configCheckMap(false);
		DisplayMetrics dm = new DisplayMetrics();
		((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
		layoutParams = new GridView.LayoutParams(
				dm.widthPixels / 4,
				dm.widthPixels/ 8);
	}
	/**
	 * 首先,默认情况下,所有项目都是没有选中的.这里进行初始化
	 */
	public void configCheckMap(boolean bool) {

		for (int i = 0; i < lists.size(); i++) {
			isCheckMap.put(i, bool);
		}

	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return lists == null ? 0 : lists.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return lists.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}


	@Override
	public View getView(final int position, View v, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewGroup layout = null;
		if (v == null) {
			layout = (ViewGroup) LayoutInflater.from(context).inflate(
					R.layout.gridview_items, parent, false);
			layout.setLayoutParams(layoutParams);
		
		}else{
			layout = (ViewGroup) v;
		}
		/*
		 * 获得该item 是否允许删除
		 */
		Itembean item = lists.get(position);
		boolean canRemove = item.isCanRemove();
		
		CheckBox cbCheck = (CheckBox) layout.findViewById(R.id.tv_ss1);
		cbCheck.setText(item.getTv());
		cbCheck.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(CompoundButton buttonView,
					boolean isChecked) {

				/*
				 * 将选择项加载到map里面寄存
				 */
				isCheckMap.put(position, isChecked);
			}
		});
		if (!canRemove) {
			cbCheck.setChecked(false);
		} else {
			if (isCheckMap.get(position) == null) {
				isCheckMap.put(position, false);
			}

			cbCheck.setChecked(isCheckMap.get(position));
			ViewHolder holder = new ViewHolder();
			holder.cbCheck = cbCheck;
			/**
			 * 将数据保存到tag
			 */
			layout.setTag(holder);
		}
		return layout;
	}

	/**
	 * 增加一项的时候
	 */
	public void add(Itembean bean) {
		this.lists.add(0, bean);

		// 让所有项目都为不选择
		configCheckMap(false);
	}

	// 移除一个项目的时候
	public void remove(int position) {
		this.lists.remove(position);
	}
	
//获取选择的集合
	public Map<Integer, Boolean> getCheckMap() {
		return this.isCheckMap;
	}

	public static class ViewHolder {

		public CheckBox cbCheck = null;
		public TextView title = null;
		public Object data = null;

	}

	public List<Itembean> getDatas() {
		return lists;
	}


再看Activity

public class TestSetLabelFragment extends Fragment implements OnClickListener {
	private TextView tv_navigtion_title,tv_register;
	private List<Itembean> list = new ArrayList<Itembean>();
	private List<String> listsNo = new ArrayList<String>();
	private GvselectClassAdapter Gadapter;
	private GridView gv_list;
	private String[] string = new String[]{ "创业", "科技", "课程", "生活", "运动", "商务", "公益", "社交",
			"亲子", "电影", "娱乐", "音乐", "校园", "文化", "其它" };
	

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setdatas();
	}
	// 模拟假数据
	private void setdatas() {
		// TODO Auto-generated method stub
		for (int i = 0; i < string.length; i++) {
			Itembean itembean = new Itembean(string[i], false);
			list.add(itembean);
		}
		

	}

	@Override
	public View onCreateView(LayoutInflater inflater,
			ViewGroup container, Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.fragment_select_class, container,
				false);
		tv_navigtion_title = (TextView) view
				.findViewById(R.id.tv_navigtion_title);
		tv_register = (TextView) view
				.findViewById(R.id.tv_register);
		tv_navigtion_title.setText("多选demo");
		gv_list = (GridView) view.findViewById(R.id.gv_list);
		gv_list.setColumnWidth(10);
		gv_list.setVerticalSpacing(15);
		tv_register.setOnClickListener(this);
		Gadapter = new GvselectClassAdapter(getActivity(), list);
		gv_list.setAdapter(Gadapter);
		
		gv_list.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				if (arg1.getTag() instanceof ViewHolder) {

					ViewHolder holder = (ViewHolder) arg1.getTag();

					// 会自动出发CheckBox的checked事件
					holder.cbCheck.toggle();

				}
			}
		});
		return view;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.tv_register:
		   String datas = "";
			Map<Integer, Boolean> map = Gadapter.getCheckMap();
			// 进行遍历
		   int j=0;
			for (int i = 0; i < list.size(); i++) {
				if (map.get(i) != null && map.get(i)) {
					if(map.get(i)){//如果为true
						j +=1;//记录是否有选择的
						Itembean itembean = list.get(i);//取出选择的数据
						datas  += itembean.getTv()+",";//为了显示做了拼接展示
					}
				}
			}
			if(j==0){
				Toast.makeText(getActivity(), "请选择", 0).show();
				return;
			}
			Toast.makeText(getActivity(), datas.substring(0,datas.length()-1), 0).show();
				Log.d("tag", "总数"+map.size()+datas.substring(0,datas.length()-1));
			break;

		default:
			break;
		}
	}



感兴趣的可以下载来看看,不用积分..

下载地址:http://download.csdn.net/detail/lin708911156/9276933


相关文章推荐

GridView实现漂亮的多选效果

  • 2013年03月15日 15:12
  • 763KB
  • 下载

GridView实现多选

  • 2015年11月17日 15:40
  • 1.36MB
  • 下载

GridView中item的多选实现

由于项目需要,所以就写了一个demo,记录到博客中。 GridView中item的单选的实现,请点击消除点击GridView的item默认的颜色,请点击接下来言归正传,开始今天的重点;1.先上布局文...

GridView实现多选,全选,反选功能

  • 2017年02月03日 16:03
  • 26.66MB
  • 下载

android 实现GridView多选效果

在使用 GridView的时候,有时需要多选上面显示的类容,比如批量删除上面显示的图片,批量上传图片等。这个时候我们可以使用层叠图来实现,效果如下,点击图片后,上面会显示出一个打钩的图片,如图:再点击...

android GridView实现图库预览图,多选模式下右上角打勾

看到有初学者有这样的需求: GridView实现图库预览图,多选模式下右上角打勾。(4.0图库的预览图多选时,多了个蓝色边框,其实是蓝色背景)        GridView在自己实际开发中也没用到...

gridview如何实现多选的功能。

就是在每一个选择的item设置背景色。设置活动和非活动的背景色。然后通过在一个Mapt里面放着选中的每个的pos和获得的状态,最后通过遍历list获取状态是activited的那些。根据id得到lis...

devexpress中gridview控件实现多选功能

前段时间做一个项目winform项目时,有个模块需要用到一个功能,在gridcontrol的表头添加一个checkedit,用户点击checkedit时全选或者取消全选数据。 在网上搜了很多文章,大...

devExpress之GridView小技巧(一):实现拖拽多选

GridView可以通过Shift键或Ctrl键以及Ctrl+A快捷键实现多选,但是默认不支持拖拽多选,好像也没有设置的方法。这样虽然没什么问题,但是肯定会给用户带来不便。 首先要设置Options...

Android中GridView实现长按多选功能

前言:GridView可用于展示多行多列的统一格式数据,但本身没有多选操作。现通过一系列代码实现GridView的长按多选操作,可以先看一个示例图。 以下是实现该功能的主要代码: MainAc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GridView实现多选
举报原因:
原因补充:

(最多只允许输入30个字)