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
- listview简单实现多选
- ListVIew简单实现多布局
- 简单实现单选多选(GrideView实现单选,ListView实现多选),横向ListView
- Listview实现简单的单选功能
- ListView多条目展示的简单实现
- Android listView简单实现
- 简单的listview实现
- ListView实现简单分页
- ListView简单实现
- ListView的简单实现
- ArrayAdapter简单实现 Listview
- listview实现多选
- 简单 ListView 实现-- Simple ListView Example
- android ListView的简单实现
- android之ListView简单实现
- Android ListView的简单实现
- 最简单的listview实现
- 最简单的ListView中实现单选和多选效果
- 三种快排及四种优化方式
- RDD基本转换操作(4)–union、intersection、subtract
- 4-段描述符属性分析
- 从JKS文件中读取密钥
- SGM算法思路
- listview简单实现多选
- 回车键实现按钮点击事件
- 任务的同步与通信_读书笔记_6
- php获取服务器操作系统等信息
- Apache配置支持目录浏览
- 题目15:链表中倒数第K个结点
- Java jdbc批量多线程读取CVS文件入库性能优化篇
- Android必备神级工具(开发,插件,效率)
- Standalone mongod转化为shard cluster