1、获取所有数据源;

2、获取关键字,并比较是否包含关键字;

3、包含时,添加到需要小时的数据中,查找完成后,通知adapter更新显示。

上代码:

1、位listview添加TextWatcher监听,在输入完成后,获取关键字。

@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
updateStates();
}


@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub


}


@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub


}

这个是在有内容时候显示删除图标,没有内容显示搜索图标

private void updateStates() {
if (mSearchInfo.length() < 1) {
mSearchInfo.setCompoundDrawablesWithIntrinsicBounds(mSearch, null, null, null);
if (mSearchContacts != null)
mSearchContacts.clear();
} else {
mSearchInfo.setCompoundDrawablesWithIntrinsicBounds(null, null, mDel, null);
mKeyWord = mSearchInfo.getText().toString();
searchContacts();
}
if (null != mSearchContacts && mSearchContacts.size() > 0) {
mSearchShow.setVisibility(View.VISIBLE);
if (mAdapter != null)
mAdapter.notifyDataSetChanged();
} else {
mSearchShow.setVisibility(View.GONE);
}
}

2、查找内容:

private void searchContacts() {
if (null != mSearchContacts)
mSearchContacts.clear();
if (null == mAllContacts || mAllContacts.size() == 0 || null == mKeyWord) {
Log.d("tiger", "no contacts or keyword is null , so return!");
return;
}
for (Object info : mAllContacts) {
if (info instanceof ContactsInfo) {
ContactsInfo contactsInfo = (ContactsInfo) info;
String name = contactsInfo.getName();
if (null != name && name.contains(mKeyWord)) {
mSearchContacts.add(contactsInfo);
continue;
}
String id = contactsInfo.getIpocid();
if (null != id && id.contains(mKeyWord)) {
mSearchContacts.add(contactsInfo);
continue;
}
}
}
}

3、通知adapter更新:

4、把关键字设置为红色:

private Object checkKeyWord(String check) {
if (null == mKeyWord)
return check;
if (check != null && check.contains(mKeyWord)) {
int index = check.indexOf(mKeyWord);
int len = mKeyWord.length();
Spanned temp = Html.fromHtml(
check.substring(0, index) + "" + check.substring(index, index + len)
+ "
" + check.substring(index + len, check.length()));


return temp;
}
return check;
}

5、判断是否含有关键字,并设值。

Object newName = checkKeyWord(name);
if (newName instanceof Spanned) {
hold.name.setText((Spanned) newName);
} else {
hold.name.setText(name);
}

更多相关文章

  1. android EditText控件如何禁止往里面输入内容?
  2. ContactsContract获取联系人信息
  3. 获取Android设备的方向 -- gsensor
  4. android 手机获取外置SD卡路径
  5. Android加载图片出现内存溢出攻略
  6. 解决Android文档打开慢的问题
  7. android中的webview加载网页只想显示部分内容改怎么做
  8. android中几个EditText的内容相关联的设置
  9. 12.6 时间与日期

随机推荐

  1. 为什么我使用此Linq to Sql方法获得Inval
  2. PB中动态SQL处理BLOB的方式
  3. mysql-5.7.21-winx64.zip 下载安装(Win10)
  4. 网站速度慢及其解决方法
  5. 在Delete From语句中带有别名的表变量。
  6. SQL查出比经理薪水还高的员工信息:
  7. SQL Server 自动增长清零
  8. php添加pdo_mysql扩展
  9. NoSQL_Cassandra_导出数据库结构/数据库
  10. SQL服务器数据部分的年和月