gridview如何实现多选的功能。

				

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

gridview的item的布局。



    
    


布局的background的gridview_selector




    
           
    
    
	

关于gridviewAdapter的代码

package com.fanfanwang.ffw.app.adapter;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.fanfanwang.ffw.app.AppConstant;
import com.fanfanwang.ffw.app.meiliao.R;


public class DuoXuanAdapter extends BaseAdapter {

	private List beans;
	private Context mContext;
	public int now=0;//上一次选中的pos
	private boolean isFlag=true;
	public DuoXuanAdapter(Context mContext,List beans) {
		// TODO Auto-generated constructor stub
		this.mContext = mContext;
		this.beans = beans;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return beans.size();
	}

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

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

	@Override
	public View getView(final int position, View convertView, final ViewGroup parent) {
		// TODO Auto-generated method stub
		final ViewHolder holder;
		if (convertView == null) {
			LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			convertView = inflater.inflate(R.layout.item_for_work, null);
			holder = new ViewHolder();
			holder.tv_work = (TextView) convertView.findViewById(R.id.tv_work);
			convertView.setTag(holder);
		}else {
			holder = (ViewHolder) convertView.getTag();
		}
		holder.tv_work.setText(AppConstant.URLDecoderString(beans.get(position)));
		return convertView;
	}
	class ViewHolder {
		public 	TextView tv_work;
	}

}

关于在activity如何处理遍历的代码。给gridview设置监听器

	/**
	 * 用了存放点击的gridview的item的pos和这个pos的选中状态
	 */
	private Map gvChooseMap=new HashMap();

gridview.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView adapterView, View view, int pos,
					long arg3) {
				if(view.isActivated()){
					view.setActivated(false);
					gvChooseMap.put(pos, false);
				}else{
					view.setActivated(true);
					gvChooseMap.put(pos, true);
				}
			}
		});


最后点击确然按钮的时候遍历list取出里面boolean是true的。然后根据boolean对应的integer。从list里面取出内容(这个list是代表给gridAdapter赋值的list)


nextButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if(gvChooseMap.size()==0)//如果map为0或者,map里面的全是false表示一个也没有选中。
				{
					ToastAlone.showToast(getActivity(), "请选择爱好").show();
					return;
				}
				
				StringBuffer sb=new StringBuffer();
				//遍历map
				for(Entry entry : gvChooseMap.entrySet()){

					int strkey = entry.getKey();
					boolean flag = entry.getValue();
					if(flag==true){
						sb.append(list.get(strkey)+",");
					}
				}
				if(sb.length()>0)
				{
					//说明有爱好的内容。否则就提示选择爱好
					//作用是去掉最后一个, 因为这个数据是从网上获取的,所以需要解码
					RegisterAct.registerInfo.add(AppConstant.URLDecoderString(sb.substring(0, sb.length()-1)));
				}else{
					ToastAlone.showToast(getActivity(), "请选择爱好").show();
					return;
				}
				transaction
				.replace(R.id.layout_root, fragment).commit();
			}
		});


你可能感兴趣的:(android基础)