最近在项目开发中,由于项目的需求要实现一些列表的单选,多选,全选,批量输入之类的功能,其实功能的实现倒不是很复杂,需求中也没有涉及到复杂的动画什么之类,主要是解决列表数据复用的问题,解决好这个就可以了。下面是最近项目中涉及到的一些:

listview实现多选、全选、取消全选:
下面是适配器,一开始在适配器的构造函数中,对数据进行初始化,同时定义一个集合用于管理listview的点击;
class BatchAdpter extends BaseAdapter {
private HashMap<Integer, Boolean> isSelected;
private List<DtGzsCustomer> list;
private Context context;
@SuppressLint("UseSparseArrays")
public BatchAdpter(List<DtGzsCustomer> list,Context context) {
this.context=context;
this.list = new ArrayList<DtGzsCustomer>();
if (list != null) {
this.list.addAll(list);
}
isSelected = new HashMap<Integer, Boolean>();
initDate(false);
}
// 初始化isSelected的数据
private void initDate(boolean bool) {
for (int i = 0; i < list.size(); i++) {
DtGzsCustomer dtGzsCustomer = list.get(i);
if (bool) {
datas.add(dtGzsCustomer.thread_id);
} else {
datas.remove(dtGzsCustomer.thread_id);
}
getIsSelected().put(i, bool);
}
}
public HashMap<Integer, Boolean> getIsSelected() {
return isSelected;
}
public void setIsSelected(HashMap<Integer, Boolean> isSelected) {
this.isSelected = isSelected;
}
public void nodfiyData(List<DtGzsCustomer> list) {
if (list != null) {
this.list.clear();
this.list.addAll(list);
}
notifyDataSetChanged();
}
@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) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.no_contact_listview_item, null);
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.sex = (TextView) convertView.findViewById(R.id.sex);
holder.popuse = (TextView) convertView.findViewById(R.id.popuse);
holder.tv_phone = (TextView) convertView.findViewById(R.id.tv_phone);
holder.allocation = (TextView) convertView.findViewById(R.id.allocation);
holder.time = (TextView) convertView.findViewById(R.id.time);
holder.btn_dis = (Button) convertView.findViewById(R.id.btn_dis);
holder.btn_allot = (Button) convertView.findViewById(R.id.btn_allot);
holder.btn_telephone = (Button) convertView.findViewById(R.id.btn_telephone);
holder.btn_follow = (Button) convertView.findViewById(R.id.btn_follow);
holder.cb = (CheckBox) convertView.findViewById(R.id.cb);
holder.allocation.setVisibility(View.INVISIBLE);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
DtGzsCustomer data = list.get(position);
SalesTools.setTextViewText(holder.name, data.p_customer_name);
SalesTools.setTextViewText(holder.sex, data.gender);
SalesTools.setTextViewText(holder.popuse, data.purpose_series);
SalesTools.setTextViewText(holder.tv_phone, data.mobile_no);
SalesTools.setTextViewText(holder.allocation, data.thread_contact_state);
SalesTools.setTextViewText(holder.time, data.thread_create_date);
holder.btn_dis.setVisibility(View.INVISIBLE);
holder.btn_allot.setVisibility(View.INVISIBLE);
holder.btn_telephone.setVisibility(View.INVISIBLE);
holder.btn_follow.setVisibility(View.INVISIBLE);
holder.cb.setVisibility(View.VISIBLE);
HashMap<Integer, Boolean> isSelected2 = getIsSelected();
Boolean boolean1 = isSelected2.get(position);
if (boolean1 != null) {
holder.cb.setChecked(boolean1);
}
// 初始化的时候做处理,如果管理标记的集合中没有该pos则设为false如果有则设为true
if (adapter != null) {
HashMap<Integer, Boolean> isSelected = adapter.getIsSelected();
if (isSelected != null && isSelected.containsKey(position)) {
holder.cb.setChecked(isSelected.get(position));
} else {
holder.cb.setChecked(false);
}
}
return convertView;
}
}
class ViewHolder {
TextView name, sex, popuse, tv_phone, allocation, time;
Button btn_dis, btn_allot, btn_telephone, btn_follow;
CheckBox cb;
}
这里是全选的方法:
// 全选
private void choiceAll() {
adapter.initDate(true);
// 数量设为list的长度
checkNum = list.size();
// 刷新listview和TextView的显示
cb_all.setTextColor(Color.parseColor("#0097e0"));
dataChanged();
}
这里是条目点击事件:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
DtGzsCustomer dtGzsCustomer = list.get(position);
// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
ViewHolder holder = (ViewHolder) view.getTag();
// 改变CheckBox的状态
holder.cb.toggle();
// 将CheckBox的选中状况记录下来
adapter.getIsSelected().put(position, holder.cb.isChecked());
// 调整选定条目
if (holder.cb.isChecked() == true) {
checkNum++;
if (checkNum==list.size()) {
cb_all.setChecked(true);
cb_all.setTextColor(Color.parseColor("#0097e0"));
}
datas.add(dtGzsCustomer.thread_id);
} else {
cb_all.setChecked(false);
cb_all.setTextColor(Color.parseColor("#c0c0c0"));
checkNum--;
datas.remove(dtGzsCustomer.thread_id);
}
dataChanged();
}
下面是listview和radionbutton实现单个条目单选,整个列表多线:
class CheckAdapter extends BaseAdapter {
private Context mContext;
private List<DtGzsSchedule> list;
public CheckAdapter(Context context, List<DtGzsSchedule> list) {
this.mContext = context;
this.list=list;
}
@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) {
ViewHolder holder;
if (convertView==null) {
holder=new ViewHolder();
convertView=LayoutInflater.from(mContext).inflate(R.layout.check_listview_item, parent, false);
holder.sale_name = (TextView) convertView.findViewById(R.id.sale_name);
holder.sale_branch = (TextView) convertView.findViewById(R.id.sale_branch);
holder.scb = (RadioButton) convertView.findViewById(R.id.scb);
holder.scc = (RadioButton) convertView.findViewById(R.id.scc);
holder.scd = (RadioButton) convertView.findViewById(R.id.scd);
holder.sce = (RadioButton) convertView.findViewById(R.id.sce);
convertView.setTag(holder);
}else{
holder=(ViewHolder) convertView.getTag();
}
final DtGzsSchedule dtGzsSchedule = list.get(position);
OnCheckedChangeListener listener = new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String choice = buttonView.getText().toString();
if (choice.equals("到岗")) {
if (isChecked == true) {
dtGzsSchedule.check_type = "0";
setActualNum();
}
} else {
if (choice.equals("迟到")) {
if (isChecked == true) {
dtGzsSchedule.check_type = "1";
setActualNum();
}
} else if (choice.equals("休假")) {
if (isChecked == true) {
dtGzsSchedule.check_type = "2";
setActualNum();
}
} else if (choice.equals("旷工")) {
if (isChecked == true) {
dtGzsSchedule.check_type = "3";
setActualNum();
}
}
}
}
};
holder.sce.setOnCheckedChangeListener(listener);
holder.scd.setOnCheckedChangeListener(listener);
holder.scc.setOnCheckedChangeListener(listener);
holder.scb.setOnCheckedChangeListener(listener);
holder.sale_name.setText("" + dtGzsSchedule.sales_consultant_name);
holder.sale_branch.setText("" + dtGzsSchedule.sales_branch);
String check_type = dtGzsSchedule.check_type;
if (check_type.equals("0")) {// 到岗
dtGzsSchedule.scbChecked = true;
dtGzsSchedule.sccChecked = false;
dtGzsSchedule.scdChecked = false;
dtGzsSchedule.sceChecked = false;
} else if (check_type.equals("1")) {// 迟到
dtGzsSchedule.scbChecked = false;
dtGzsSchedule.sccChecked = true;
dtGzsSchedule.scdChecked = false;
dtGzsSchedule.sceChecked = false;
} else if (check_type.equals("2")) {// 旷工
dtGzsSchedule.scbChecked = false;
dtGzsSchedule.sccChecked = false;
dtGzsSchedule.scdChecked = true;
dtGzsSchedule.sceChecked = false;
} else if (check_type.equals("3")) {// 休假
dtGzsSchedule.scbChecked = false;
dtGzsSchedule.sccChecked = false;
dtGzsSchedule.scdChecked = false;
dtGzsSchedule.sceChecked = true;
}
holder.scb.setChecked(dtGzsSchedule.scbChecked);
holder.scc.setChecked(dtGzsSchedule.sccChecked);
holder.scd.setChecked(dtGzsSchedule.scdChecked);
holder.sce.setChecked(dtGzsSchedule.sceChecked);
return convertView;
}
}
class ViewHolder{
TextView sale_name, sale_branch;
RadioButton scb, scc, scd, sce;
}
ExpandableListView实现子条目单选:
class PinnedHeaderExpandableAdapter extends BaseExpandableListAdapter implements HeaderAdapter {
private Context context;
private PinnedHeaderExpandableListView listView;
private LayoutInflater inflater;
private Map<String, List<DtGzsCustomer>> map;
private List<String> parentList;
@SuppressLint("UseSparseArrays")
public PinnedHeaderExpandableAdapter(List<String> parentList, Map<String, List<DtGzsCustomer>> map, Context context,
PinnedHeaderExpandableListView listView) {
this.context = context;
this.listView = listView;
inflater = LayoutInflater.from(this.context);
this.map = new HashMap<String, List<DtGzsCustomer>>();
if (map != null) {
this.map.putAll(map);
}
this.parentList = new ArrayList<String>();
if (parentList != null) {
this.parentList.addAll(parentList);
}
}
public void notifyMap(Map<String, List<DtGzsCustomer>> map) {
if (map != null) {
this.map.clear();
this.map.putAll(map);
}
notifyDataSetChanged();
}
public void notifyParent(List<String> parentList) {
if (parentList != null) {
this.parentList.clear();
this.parentList.addAll(parentList);
}
notifyDataSetChanged();
}
@Override
public int getChildrenCount(int groupPosition) {
if (groupPosition != -1) {
String key = parentList.get(groupPosition);
return map.get(key).size();
} else {
return 0;
}
}
@Override
public Object getChild(int groupPosition, int childPosition) {
String key = parentList.get(groupPosition);// 根据组名位置的值作为map的key去获取value
DtGzsCustomer dtGzsCustomer = map.get(key).get(childPosition);
return dtGzsCustomer.sales_consultant_name;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.child, null);
TextView text = (TextView) convertView.findViewById(R.id.childto);
ImageView iv = (ImageView) convertView.findViewById(R.id.iv);
// 判断item的位置是否相同,如相同,则表示为选中状态,更改其背景颜色,如不相同,则设置背景色为白色
if (group_groupId == groupPosition && child_childId == childPosition) {
iv.setImageResource(R.drawable.login_check);
} else {
iv.setImageResource(R.drawable.login_uncheck);
}
String key = parentList.get(groupPosition);
List<DtGzsCustomer> list = map.get(key);
DtGzsCustomer childernItem = list.get(childPosition);
SalesTools.setTextViewText(text, childernItem.sales_consultant_name);
return convertView;
}
@Override
public Object getGroup(int groupPosition) {
return parentList.get(groupPosition);
}
@Override
public int getGroupCount() {
return parentList.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.group, null);
ImageView iv = (ImageView) convertView.findViewById(R.id.groupIcon);
TextView tv = (TextView) convertView.findViewById(R.id.groupto);
if (isExpanded) {
iv.setImageResource(R.drawable.btn_arrow_up);
} else {
iv.setImageResource(R.drawable.btn_arrow_down);
}
SalesTools.setTextViewText(tv, parentList.get(groupPosition));
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
@Override
public int getHeaderState(int groupPosition, int childPosition) {
final int childCount = getChildrenCount(groupPosition);
if (childPosition == childCount - 1) {
return PINNED_HEADER_PUSHED_UP;
} else if (childPosition == -1 && !listView.isGroupExpanded(groupPosition)) {
return PINNED_HEADER_GONE;
} else {
return PINNED_HEADER_VISIBLE;
}
}
@Override
public void configureHeader(View header, int groupPosition, int childPosition, int alpha) {
String groupData = this.parentList.get(groupPosition);
((TextView) header.findViewById(R.id.groupto)).setText(groupData);
}
private SparseIntArray groupStatusMap = new SparseIntArray();
@Override
public void setGroupClickStatus(int groupPosition, int status) {
groupStatusMap.put(groupPosition, status);
}
@Override
public int getGroupClickStatus(int groupPosition) {
if (groupStatusMap.keyAt(groupPosition) >= 0) {
return groupStatusMap.get(groupPosition);
} else {
return 0;
}
}
public void notifyDataSetChanged() {// 通知数据发生变化
super.notifyDataSetChanged();
}
}
子条目点击事件处理:
// 子条目的点击事件
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
// Toast.makeText(SaleNameActivity.this, "点击了" + groupPosition +
// childPosition, Toast.LENGTH_LONG).show();
// 将被点击的一丶二级标签的位置记录下来
String key = groupData.get(groupPosition);
List<DtGzsCustomer> list = map.get(key);
DtGzsCustomer dtGzsCustomer = list.get(childPosition);
sales_consultant_name = dtGzsCustomer.sales_consultant_name;
sales_consultant_id = dtGzsCustomer.sales_consultant_id;
group_groupId = groupPosition;
child_childId = childPosition;
// 刷新界面
adapter.notifyDataSetChanged();
return true;
}
listview和edittext实现批量输入:
class SetAdapter extends BaseAdapter {
private List<DtGzsCustomer> goalList;
private Context context;
public SetAdapter(Context context, List<DtGzsCustomer> goalList) {
this.context = context;
this.goalList = new ArrayList<DtGzsCustomer>();
if (goalList != null) {
this.goalList.addAll(goalList);
}
}
public void nodfiyData(List<DtGzsCustomer> goalList) {
if (goalList != null) {
this.goalList.clear();
this.goalList.addAll(goalList);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return goalList.size();
}
@Override
public Object getItem(int position) {
return goalList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.serise_data_view, parent, false);
holder.et_order = (EditText) convertView.findViewById(R.id.et_order);
holder.et_car = (EditText) convertView.findViewById(R.id.et_car);
holder.sale_name = (TextView) convertView.findViewById(R.id.sale_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (position % 2 == 0) {
convertView.setBackgroundColor(Color.parseColor("#e4ebf1"));
} else {
convertView.setBackgroundColor(Color.parseColor("#ced7de"));
}
final DtGzsCustomer dtGzsCustomer = goalList.get(position);
removeTextWatcher(holder.et_order);
removeTextWatcher(holder.et_car);
String orderNum = dtGzsCustomer.order_num;
holder.et_order.setText(""+orderNum);
String returnNum = dtGzsCustomer.return_num;
holder.et_car.setText(""+returnNum);
holder.sale_name.setText(""+dtGzsCustomer.sales_consultant_name);
TextWatcher orderTitle = new SimpleTextWatcher() {
@Override
public void afterTextChanged(Editable s) {
int sum=0;
if (TextUtils.isEmpty(s)) {
dtGzsCustomer.order_num="";
} else {
dtGzsCustomer.order_num=String.valueOf(s).replace("0", "");
}
String sales_consultant_id = dtGzsCustomer.sales_consultant_id;
if (!orderMap.containsKey(sales_consultant_id)) {
String order_num = dtGzsCustomer.order_num.replace("0", "");
orderMap.put(sales_consultant_id, order_num);
}else{
orderMap.remove(sales_consultant_id);
String order_num = dtGzsCustomer.order_num.replace("0", "");
orderMap.put(sales_consultant_id, order_num);
}
Iterator<Map.Entry<String, String>> it = orderMap.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String, String> entry = it.next();
String value = entry.getValue();
if (value==null||value.length()==0) {
value="0";
}
sum=sum+Integer.parseInt(value);
}
tv_order.setText("订车"+sum+"台");
}
};
holder.et_order.addTextChangedListener(orderTitle);
holder.et_order.setTag(orderTitle);
TextWatcher carContent = new SimpleTextWatcher() {
@Override
public void afterTextChanged(Editable s) {
int sum=0;
if (TextUtils.isEmpty(s)) {
dtGzsCustomer.return_num="";
} else {
dtGzsCustomer.return_num=String.valueOf(s).replace("0", "");
}
String sales_consultant_id = dtGzsCustomer.sales_consultant_id;
if (!carMap.containsKey(sales_consultant_id)) {
String return_num = dtGzsCustomer.return_num.replace("0", "");
carMap.put(sales_consultant_id, return_num);
}else{
carMap.remove(sales_consultant_id);
String return_num = dtGzsCustomer.return_num.replace("0", "");
carMap.put(sales_consultant_id, return_num);
}
Iterator<Map.Entry<String, String>> it = carMap.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String, String> entry = it.next();
String value = entry.getValue();
if (value==null||value.length()==0) {
value="0";
}
sum=sum+Integer.parseInt(value);
}
tv_return.setText("交车"+sum+"台");
}
};
holder.et_car.addTextChangedListener(carContent);
holder.et_car.setTag(carContent);
return convertView;
}
/**
* 去除textWatcher
*
* @param editText
*/
private void removeTextWatcher(EditText editText) {
if (editText.getTag() instanceof TextWatcher) {
editText.removeTextChangedListener((TextWatcher) editText.getTag());
}
}
}
class ViewHolder {
EditText et_order, et_car;
TextView sale_name;
}
以下是效果显示:
源码地址:http://xiazai./201702/yuanma/ListDemo
以上所述是小编给大家介绍的Android listview ExpandableListView实现多选,单选,全选,edittext实现批量输入的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# listview
# expandablelisstview
# 单选
# 多选
# Android ExpandableListView双层嵌套实现三级树形菜单
# Android ExpandableListView实现下拉刷新和加载更多效果
# Android ExpandableListView单选以及多选实现代码
# Android ScrollView嵌套ExpandableListView显示不正常的问题的解决办
# Android 关于ExpandableListView刷新问题的解决方法
# Android 关于ExpandableListView去掉里头分割线的方法
# Android UI控件ExpandableListView基本用法详解
# Android改变ExpandableListView的indicator图标实现方法
# Android中ExpandableListView的用法实例
# Android ExpandableListView展开列表控件使用实例
# Android ExpandableListView用法示例详解
# 全选
# 设为
# 涉及到
# 小编
# 在此
# 给大家
# 将被
# 中也
# 如不
# 所述
# 给我留言
# 感谢大家
# 很复杂
# 就可以
# 背景色
# 复用
# 主要是
# 疑问请
相关文章:
如何在阿里云部署织梦网站?
网站微信制作软件,如何制作微信链接?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
实惠建站价格推荐:2025年高性价比自助建站套餐解析
,购物网站怎么盈利呢?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
建站VPS配置与SEO优化指南:关键词排名提升策略
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何零基础开发自助建站系统?完整教程解析
如何打造高效商业网站?建站目的决定转化率
北京建设网站制作公司,北京古代建筑博物馆预约官网?
个人摄影网站制作流程,摄影爱好者都去什么网站?
制作销售网站教学视频,销售网站有哪些?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
详解jQuery中基本的动画方法
制作网站的模板软件,网站怎么建设?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
制作电商网页,电商供应链怎么做?
制作网站怎么制作,*游戏网站怎么搭建?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
香港服务器选型指南:免备案配置与高效建站方案解析
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
南宁网站建设制作定制,南宁网站建设可以定制吗?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
如何设计高效校园网站?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
建站之星安装提示数据库无法连接如何解决?
建站之星安装路径如何正确选择及配置?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
,怎么用自己头像做动态表情包?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
如何选择域名并搭建高效网站?
建站之星下载版如何获取与安装?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
C#怎么创建控制台应用 C# Console App项目创建方法
javascript中的try catch异常捕获机制用法分析
北京企业网站设计制作公司,北京铁路集团官方网站?
如何在Windows 2008云服务器安全搭建网站?
实例解析Array和String方法
*服务器网站为何频现安全漏洞?
盘锦网站制作公司,盘锦大洼有多少5G网站?
如何通过远程VPS快速搭建个人网站?
如何用花生壳三步快速搭建专属网站?
中山网站推广排名,中山信息港登录入口?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
音乐网站服务器如何优化API响应速度?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
*请认真填写需求信息,我们会在24小时内与您取得联系。