listview简单实现多选

来源:互联网 发布:苹果5s如何优化 编辑:程序博客网 时间:2024/06/05 15:47

listview实现多选:

原理:在adapter中新建一个hashset存放多选时被选中的item的postion。

然后定义一个变量,代表2中模式,比如变量等于1时代表单选模式,等于2时代表多选模式。

getView中,根据模式的不同以及是否选中状态来设置相应的view的相应的状态。

然后就是在listview的setOnItemClickListener中根据模式的不同来设置对应的点击事件了。

先看item的布局:

多选之未选中状态,把imageview设置为可见


多选之已选中状态,把imageview设置为可见且设置一张已选中的图片


单选状态



下面是adapter的完整代码

package com.tianxia.hnq.erweima;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.HashSet;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;/** * Created by Administrator on 16-9-8. */public class Adpter001 extends BaseAdapter {    private Context context;    private List<String> listName;    private List<String> listTel;    public static final int MODE_DANXUAN=1;//单选模式    public static final int MODE_DUOXUAN=2;//多选模式 默认单选模式    private int MODE=1;//默认等于单选模式    private HashSet<Integer> set;//保存多选状态下的变量    public Adpter001(Context context, List<String> listName, List<String> listTel) {        this.context = context;        this.listName = listName;        this.listTel = listTel;        set=new HashSet<>();    }    @Override    public int getCount() {        return listName.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 = null;        if (convertView == null) {            convertView = LayoutInflater.from(context).inflate(R.layout.item_name, null);            viewHolder = new ViewHolder(convertView);            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        viewHolder.name.setText(listName.get(position) + "");        viewHolder.tel.setText(listTel.get(position) + "");        if(MODE==MODE_DANXUAN){            viewHolder.xuanzhong.setVisibility(View.GONE);        }else{            viewHolder.xuanzhong.setVisibility(View.VISIBLE);            if(set.contains(position)){                viewHolder.xuanzhong.setImageResource(R.mipmap.xz);            }else{                viewHolder.xuanzhong.setImageResource(R.mipmap.wxz);            }        }        return convertView;    }    static class ViewHolder {        @BindView(R.id.name)        TextView name;        @BindView(R.id.tel)        TextView tel;        @BindView(R.id.xuanzhong)        ImageView xuanzhong;        ViewHolder(View view) {            ButterKnife.bind(this, view);        }    }    //设置模式    public void startMode(int mode){        MODE=mode;        this.notifyDataSetChanged();    }    //得到当前的模式    public int getMode(){        return MODE;    }    //多选之添加    public void add(int position){        set.add(position);        this.notifyDataSetChanged();    }    //多选之删除    public void remove(int position){        set.remove(position);        this.notifyDataSetChanged();    }    //获取存储的set集合    public HashSet<Integer> getSet(){        return set;    }    //清空set集合    public void clear(){        set.clear();        this.notifyDataSetChanged();    }}
下面是listview的代码:

 listview001.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                if (adpter001.getMode() == Adpter001.MODE_DANXUAN) {                    String s = zuHeString(listName.get(position), listTel.get(position));                    Intent intent = new Intent(Main2Activity.this, ErWeiActivity.class);                    intent.putExtra("data", s);                    startActivity(intent);                } else {//多选                    set=adpter001.getSet();                    if(!set.contains(position)&&adpter001.getSet().size()<10){//如果没有选中就选中                        adpter001.add(position);                    }else{//如果选中了就取消选中                        adpter001.remove(position);                    }                    shuliang.setText(adpter001.getSet().size()+"/10");                }            }        });

我这里设置了最多只能选10个。

很简单的就实现了多选功能,另:listview自带了多选功能的,但我觉得不好用,且不好看,所以没用。

以上如有错误或BUG欢饮指正

0 0
原创粉丝点击