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

本文介绍了如何在Android应用中使用反选方法处理contactList数据源,并详细展示了自定义适配器的代码,涉及列表项视图更新、选中状态管理和数据同步。同时,文中还提及了Android开发的核心知识点、思维脑图和高级技术资源链接。
摘要由CSDN通过智能技术生成

反选方法

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();

}

Contact contact = contactList.get(position);

if (contact.getName() == “” || contact.getName() == null) {

String name = “未知”;

holder.contactName.setText(name);

} else {

holder.contactName.setText(contact.getName());

}

if (kind != null && kind.equals(“email”)) {

if (!TextUtils.isEmpty(contact.getEmail())) {

holder.contactEmail.setText(contact.getEmail());

holder.contactMobile.setVisibility(View.GONE);

}

} else if (!TextUtils.isEmpty(contact.getNumber())) {

holder.contactMobile.setText(contact.getNumber());

holder.contactEmail.setVisibility(View.GONE);

} else {

holder.contactMobile.setVisibility(View.GONE);

holder.contactEmail.setVisibility(View.GONE);

}

// 显示是否选中状态

holder.checkBox.setChecked(map_NumberSelected.get(contact));

return convertView;

}

public void setContactList(ArrayList contactList) {

this.contactList = contactList;

}

public void setMap_NumberSelected(

HashMap<Contact, Boolean> map_NumberSelected) {

this.map_NumberSelected = map_NumberSelected;

}

最后是今天给大家分享的一些独家干货:

【Android开发核心知识点笔记】

【Android思维脑图(技能树)】

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【Android高级架构视频学习资源】
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
转存中…(img-jGjhyJ8G-1714645365025)]

【Android思维脑图(技能树)】

[外链图片转存中…(img-KPBA5wWk-1714645365027)]

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

[外链图片转存中…(img-IljKzroA-1714645365027)]

【Android高级架构视频学习资源】
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值