if (!TextUtils.isEmpty(s)) {
btnClear.setVisibility(View.VISIBLE);
selectAllBtn.setVisibility(View.GONE);
searchList(s.toString());
} else {// 如果输入框内容为空,显示全部
btnClear.setVisibility(View.GONE);
selectAllBtn.setVisibility(View.VISIBLE);
searchList(“”);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(final Editable s) {
}
});
一般搜索框会有删除的×,我这里还有控制显示全选的框,效果如下:
在文本变化的时候会不断刷新列表,会调用searchList的方法,通过传递字符串来实现更新列表
通过lastest这个标识来解决线程同步问题,只有i跟lastest相等的时候采取刷新列表,其实这个办法并不土,不知道网友是否有更好的实现方法,麻烦指教一下。
private static int lastest = 0;
// 实现线程同步搜索联系人
// 线程同步问题可能会导致数据显示错误,比如会显示上一次搜索到的数据
public void searchList(final String s) {
// 用户可能正在快速输入电话号码,之前在搜索的联系人列表已经过时了。
final int i = ++lastest;
// 开一个线程来进行快速搜索
new Thread(new Runnable() {
@Override
public void run() {
if (TextUtils.isEmpty(s)) {
// 如果输入的字符串为空,则显示所有联系人
searchContacts = allContacts;
} else {
// searhContacts指向搜索返回的list
searchContacts = PhoneUtil.search(s, allContacts);
}
if (i == lastest) { // 避免线程同步问题
LocalContactActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (i == lastest) { // 避免线程同步问题
contactList.clear();
contactList.addAll(searchContacts);
refreshList();
}
}
分享读者
作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。
35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618524047)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!