最近项目中需要用到自动检索内容的需求,即通过改变检索条件来实时更新检索内容。
package com.lolaage.activity.im;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import com.lolaage.R;
import com.lolaage.deamon.Memory;
import com.lolaage.entity.Department;
import com.lolaage.entity.Team;
import com.lolaage.entity.User;
public class SearchAdapter extends BaseAdapter implements Filterable{
private LayoutInflater inflater;
private Context context;
private List<User> list;//保存当前搜索出来的数据
public SearchAdapter(Context ctx,List<User> data){
this.context = ctx;
this.list = data;
inflater = LayoutInflater.from(context);
}
@Override
public Filter getFilter() {//给listview添加过滤方法,根据名字检索联系人
Filter filter = new Filter() {
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
list = (List<User>) results.values;
if(results.count > 0){
notifyDataSetChanged();
}else {
notifyDataSetInvalidated();
}
}
/**
* 返回检索的结果
*/
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<User> result = new ArrayList<User>();
if(!"".equals(constraint)){
synchronized (Memory.getFriendData()) {
for(Team team : Memory.getFriendData()){
List<User> users = team.getFriendList();
for(int i=0;i<users.size();i++){
User user = users.get(i);
if(user.getNickName().toString().toLowerCase().contains(constraint)){
result.add(user);
}
}
}
}
}
results.values = result;
results.count = result.size();
return results;
}
};
return filter;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HoldView holdView = null;
if(convertView == null){
holdView = new HoldView();
convertView = inflater.inflate(R.layout.contact_search_item, null);
holdView.name = (TextView) convertView.findViewById(R.id.tv_name);
holdView.department = (TextView) convertView.findViewById(R.id.tv_department);
holdView.phone = (TextView) convertView.findViewById(R.id.tv_phone);
convertView.setTag(holdView);
}else {
holdView = (HoldView) convertView.getTag();
}
if(list != null && list.size() > 0){
User user = list.get(position);
holdView.name.setText(user.getNickName());
holdView.phone.setText(user.getPhoneNum());
for(int j =0;j<Memory.departments.size();j++){
Department department = Memory.departments.get(j);
if(user.getDepartment_id() == Integer.parseInt(department.id)){
holdView.department.setText(department.name);
break;
}
}
}
return convertView;
}
class HoldView{
TextView name;
TextView department;
TextView phone;
}
}
activity中的处理:
searchAdapter = new SearchAdapter(this, new ArrayList<User>());
etSearch.addTextChangedListener(textWatcher);
etSearch.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Log.v("LoginActivity", event.getAction()+"");
if (event.getAction() == MotionEvent.ACTION_DOWN) {
elv.setVisibility(View.GONE);
llSearch.setVisibility(View.VISIBLE);//显示检索视图
lvSearch.setAdapter(searchAdapter);
}
return false;
}
});
/**
* 文本输入框输入检索条件的观察者
*/
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// Log.v("LoginActivity", "onTextChanged");
searchAdapter.getFilter().filter(s);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// Log.v("LoginActivity", "beforeTextChanged");
}
@Override
public void afterTextChanged(Editable s) {
// Log.v("LoginActivity", "afterTextChanged");
if ("".equals(etSearch.getText().toString())) {
}
}
};
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/group_bg">
<LinearLayout android:id="@+id/rl_contact_search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentTop="true">
<EditText android:id="@+id/et_contact_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_weight="6"
android:paddingLeft="45dip"
android:background="@drawable/oragi_search"
android:hint="search..."/>
</LinearLayout>
<ExpandableListView
android:id="@+id/elv_contact"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
android:drawSelectorOnTop="false">
</ExpandableListView>
<RelativeLayout android:id="@+id/ll_search"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"
android:orientation="vertical"
android:layout_below="@+id/rl_org_search">
<ListView android:id="@+id/list_search"
android:layout_alignParentTop="true"
android:fadingEdgeLength="0.0sp" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:drawSelectorOnTop="false"
android:cacheColorHint="#ffffffff" android:divider="@drawable/poi_add02"
android:dividerHeight="1.0dip"
android:fastScrollEnabled="true" android:scrollbars="none"
/>
<ImageButton android:id="@+id/ibBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/back_btn_selector"/>
</RelativeLayout>
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"
android:text="no data">
</TextView>
</LinearLayout>
- 大小: 10.9 KB
- 大小: 9.8 KB
分享到:
相关推荐
android:searchSuggestAuthority="com.example.yourapp.search.SuggestionProvider" android:searchSuggestIntentAction="android.intent.action.SEARCH" android:searchSuggestSelection=" ?" > ``` 这里,`...
Android搜索框(SearchView)的功能和用法详解 Android搜索框(SearchView)是Android系统中的一种搜索组件,它允许用户在文本框中输入文字,并通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索...
《深入解析Android QuickSearchBox程序源码》 在Android系统中,QuickSearchBox(QSB)是一个非常重要的组件,它提供了全局搜索的功能,允许用户快速查找应用内的数据、联系人、网页以及更多其他内容。本篇文章将...
) or off the Internet, and how to integrate with the built-in on-device search engine. It will help you more quickly climb the Android learning curve, so you can create the “killer app” you’ve ...
### Android5.X及以上的系统权限解决方法 #### 引言 自Android 5.0(Lollipop)以来,Google为了增强系统的安全性与稳定性,引入了一种更为严格的SELinux(Security Enhanced Linux)权限管理机制。这一机制的核心...
本示例"aacc.rar_aacc_android Search demo"聚焦于Android的搜索功能,特别是如何集成和实现Google搜索服务。这个Demo是基于一本英文书籍的翻译,并进行了整合,目的是展示如何在Android应用中实现搜索功能。 首先...
这份"Android应用源码之百度地图 搜索Search.zip"的压缩包文件,显然是一个包含示例代码的资源,旨在帮助开发者理解如何在Android应用中实现百度地图的搜索功能。以下是对这个主题的详细讲解: 首先,我们需要了解...
名称:Android SDK Search ---------------------------------------- 版本:0.3.16 作者:http://roman.nurik.net/ 分类:开发者工具 ---------------------------------------- 概述:添加一个'ad'omnibox命令并...
Search Chapter 26. Background Services Chapter 27. Broadcast Intents Chapter 28. Browsing the Web and WebView Chapter 29. Custom Views and Touch Events Chapter 30. Property Animation Chapter 31. ...
**Android SearchView 使用详解——基于 Material Design 的 Kotlin 实现** 在 Android 应用开发中,SearchView 是一个非常重要的组件,它提供了用户友好的搜索功能,可以方便地集成到应用的导航栏或工具栏中。本...
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener; import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption; import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult; import ...
在这个"android voice search 语音识别例子"中,我们将探讨如何利用Android SDK和Google的语音识别API来创建一个能够接收和处理用户语音输入的应用。 首先,我们要了解Android的语音识别机制。Android系统内置了一...
《深入解析Android-Google-QuickSearchBox 4.x 源码》 在Android系统中,Google QuickSearchBox(QSB)是一个至关重要的组件,它为用户提供了一个快速、高效的全局搜索功能,允许用户在设备上的各种数据源(如应用...
这个"Search-View-LayoutAndroid.zip"文件包含了关于在Android Lollipop(API级别21+)及以上版本中如何实现类似Dialer和Google Maps应用中的高级搜索视图和布局的示例代码。 1. **SearchView组件**:`SearchView`...
本文将深入探讨“安卓Android源码——百度地图 搜索Search.zip”这一主题,通过分析源码,揭示百度地图搜索功能的实现原理。 首先,我们需要了解百度地图SDK的基本结构。百度地图SDK主要由以下几个部分组成: 1. *...
- 实现Search:集成SearchView并处理搜索结果。 - 处理播放控制:如果应用包含媒体播放功能,需要集成PlaybackOverlayFragment并实现相关回调。 4. 设计原则: - 大胆的视觉元素:由于电视距离远,所以界面元素...
这个"Android应用源码之百度地图 搜索Search.rar"压缩包很可能是包含了一个示例项目,用于演示如何在Android应用中集成百度地图的搜索功能。通过分析这个项目的源码,我们可以学习到许多关于Android与百度地图SDK...
Android应用源码之百度地图 搜索Search.zip项目安卓应用源码下载Android应用源码之百度地图 搜索Search.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
本项目“安卓Android源码——百度地图搜索Search.zip”着重关注的是地图搜索功能,这是用户在应用中查找地点、获取导航信息的关键部分。下面我们将详细探讨这个功能的相关知识点。 1. **百度地图SDK**: 百度地图...
SearchView是android系统中内置的一个搜索框组件,可以很方便在添加在用户界面之上,但是也带来了一些问题,那就是searchview的UI是固定的,定制起来会很麻烦,如果对SearchView的要求比较高,完全可以采用button和...