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();
}
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) {
尾声
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Android核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、热修复设计、插件化框架解读、组件化框架设计、图片加载框架、网络、设计模式、设计思想与代码质量优化、程序性能优化、开发效率优化、设计模式、负载均衡、算法、数据结构、高级UI晋升、Framework内核解析、Android组件内核等。
不仅有学习文档,视频+笔记提高学习效率,还能稳固你的知识,形成良好的系统的知识体系。这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。
Android进阶学习资料库
一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!
大厂面试真题
PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《2017-2020字节跳动Android面试历年真题解析》
如果需要PDF版本可以自行领取!