Android通讯录开发之实现全选、反选功能

本文介绍了如何在Android应用中使用全选和反选功能,通过定义标识变量控制按钮状态,并利用自定义适配器管理选中状态,当数据源变化时更新列表。内容涉及ContactList、adapter和ListView组件的配合以及选中状态的管理。
摘要由CSDN通过智能技术生成

定义标识表示是否已经全选

private boolean isAllChecked = false;

在触发事件的位置根据标识来实现全选或反选

if (isAllChecked) {

selectAllBtn.setBackgroundResource(R.drawable.select_all_not);

invertSelection();

} else {

selectAllBtn.setBackgroundResource(R.drawable.select_all);

selectAllContacts();

}

全选方法

public void selectAllContacts() {

for (int i = 0; i < contactList.size(); i++) {

Contact contact = contactList.get(i);

map_NumberSelected.put(contact, true);

}

isAllChecked = true;

refreshList();

}

反选方法

public void invertSelection() {

for (int i = 0; i < contactList.size(); i++) {

Contact contact = contactList.get(i);

map_NumberSelected.put(contact, false);

}

isAllChecked = false;

refreshList();

}

上面用到contactList是你得到的数据源,是一个List,它跟map_NumberSelected都通过adapter里面定义的set方法注入到adapter里,所以选中状态发生变化也相当于数据源发生变化,只要调用notifyDataSetChanged()方法就可以更新列表。

下面是自定义adapter的代码,更新选中的状态在getView方法进行

package com.suntek.mobilemeeting.adapter;

import java.util.ArrayList;

import java.util.HashMap;

import android.content.Context;

import android.text.TextUtils;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.CheckBox;

import android.widget.TextView;

import com.suntek.mobilemeeting.R;

import com.suntek.mobilemeeting.model.Contact;

/**

  • 本地联系人适配器

  • @author wwj

*/

public class LocalContactAdapter extends BaseAdapter {

private HashMap<Integer, View> lmap = new HashMap<Integer, View>();

private ArrayList contactList;

private Context context;

private HashMap<Contact, Boolean> map_NumberSelected = null;

private String kind;

public class ViewHolder {

public TextView contactName;

public TextView contactMobile;

public TextView contactEmail;

public CheckBox checkBox;

}

public LocalContactAdapter(Context context, ArrayList contactList,

String kind) {

this.contactList = contactList;

this.context = context;

map_NumberSelected = new HashMap<Contact, Boolean>();

this.kind = kind;

}

@Override

public int getCount() {

return contactList.size();

}

@Override

public Object getItem(int position) {

return contactList.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();

LayoutInflater inflater = (LayoutInflater) context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

convertView = inflater.inflate(R.layout.local_contact_list_item,

null);

holder.contactName = (TextView) convertView

.findViewById(R.id.name_tv);

holder.contactMobile = (TextView) convertView

.findViewById(R.id.number_tv);

holder.contactEmail = (TextView) convertView

.findViewById(R.id.email_tv);

holder.checkBox = (CheckBox) convertView

.findViewById(R.id.local_contact_checkbox);

// lmap.put(position, convertView);

convertView.setTag(holder);

} else {

// convertView = lmap.get(position);

holder = (ViewHolder) convertView.getTag();

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

最后

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

[外链图片转存中…(img-fE9WagaC-1713284830845)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值