`
不夜的星辰
  • 浏览: 88298 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android search...

阅读更多

最近项目中需要用到自动检索内容的需求,即通过改变检索条件来实时更新检索内容。

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
分享到:
评论

相关推荐

    android13配置GlobalSearch全局搜索

    android:searchSuggestAuthority="com.example.yourapp.search.SuggestionProvider" android:searchSuggestIntentAction="android.intent.action.SEARCH" android:searchSuggestSelection=" ?" &gt; ``` 这里,`...

    Android搜索框(SearchView)的功能和用法详解

    Android搜索框(SearchView)的功能和用法详解 Android搜索框(SearchView)是Android系统中的一种搜索组件,它允许用户在文本框中输入文字,并通过监听器取得用户的输入,当用户点击搜索时,监听器执行实际的搜索...

    CommonsWare.The.Busy.Coders.Guide.to.Android.Development.Version.8.2.2017

    ) 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即以上系统权限解决方法

    ### Android5.X及以上的系统权限解决方法 #### 引言 自Android 5.0(Lollipop)以来,Google为了增强系统的安全性与稳定性,引入了一种更为严格的SELinux(Security Enhanced Linux)权限管理机制。这一机制的核心...

    aacc.rar_aacc_android Search demo_android search_android search

    本示例"aacc.rar_aacc_android Search demo"聚焦于Android的搜索功能,特别是如何集成和实现Google搜索服务。这个Demo是基于一本英文书籍的翻译,并进行了整合,目的是展示如何在Android应用中实现搜索功能。 首先...

    Android应用源码之百度地图 搜索Search.zip

    这份"Android应用源码之百度地图 搜索Search.zip"的压缩包文件,显然是一个包含示例代码的资源,旨在帮助开发者理解如何在Android应用中实现百度地图的搜索功能。以下是对这个主题的详细讲解: 首先,我们需要了解...

    Android SDK Search-0.3.16.zip

    名称:Android SDK Search ---------------------------------------- 版本:0.3.16 作者:http://roman.nurik.net/ 分类:开发者工具 ---------------------------------------- 概述:添加一个'ad'omnibox命令并...

    一个简单的基于 Material Design 的 Android SearchView_Kotlin

    **Android SearchView 使用详解——基于 Material Design 的 Kotlin 实现** 在 Android 应用开发中,SearchView 是一个非常重要的组件,它提供了用户友好的搜索功能,可以方便地集成到应用的导航栏或工具栏中。本...

    Android.Programming.The.Big.Nerd.Ranch.Guide.2nd.Edition.0134171454.epub

    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 百度地图 定位示例

    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 voice search 语音识别例子"中,我们将探讨如何利用Android SDK和Google的语音识别API来创建一个能够接收和处理用户语音输入的应用。 首先,我们要了解Android的语音识别机制。Android系统内置了一...

    Android-Google-QuickSearchBox 4.x 源码

    《深入解析Android-Google-QuickSearchBox 4.x 源码》 在Android系统中,Google QuickSearchBox(QSB)是一个至关重要的组件,它为用户提供了一个快速、高效的全局搜索功能,允许用户在设备上的各种数据源(如应用...

    Search-View-LayoutAndroid.zip

    这个"Search-View-LayoutAndroid.zip"文件包含了关于在Android Lollipop(API级别21+)及以上版本中如何实现类似Dialer和Google Maps应用中的高级搜索视图和布局的示例代码。 1. **SearchView组件**:`SearchView`...

    安卓Android源码——百度地图 搜索Search.zip

    本文将深入探讨“安卓Android源码——百度地图 搜索Search.zip”这一主题,通过分析源码,揭示百度地图搜索功能的实现原理。 首先,我们需要了解百度地图SDK的基本结构。百度地图SDK主要由以下几个部分组成: 1. *...

    google android tv leanback.zip

    - 实现Search:集成SearchView并处理搜索结果。 - 处理播放控制:如果应用包含媒体播放功能,需要集成PlaybackOverlayFragment并实现相关回调。 4. 设计原则: - 大胆的视觉元素:由于电视距离远,所以界面元素...

    Android应用源码之百度地图 搜索Search.rar

    这个"Android应用源码之百度地图 搜索Search.rar"压缩包很可能是包含了一个示例项目,用于演示如何在Android应用中集成百度地图的搜索功能。通过分析这个项目的源码,我们可以学习到许多关于Android与百度地图SDK...

    Android应用源码之百度地图 搜索Search.zip项目安卓应用源码下载

    Android应用源码之百度地图 搜索Search.zip项目安卓应用源码下载Android应用源码之百度地图 搜索Search.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考

    安卓Android源码——百度地图搜索Search.zip

    本项目“安卓Android源码——百度地图搜索Search.zip”着重关注的是地图搜索功能,这是用户在应用中查找地点、获取导航信息的关键部分。下面我们将详细探讨这个功能的相关知识点。 1. **百度地图SDK**: 百度地图...

    Android搜索框组件SearchView的基本使用方法

    SearchView是android系统中内置的一个搜索框组件,可以很方便在添加在用户界面之上,但是也带来了一些问题,那就是searchview的UI是固定的,定制起来会很麻烦,如果对SearchView的要求比较高,完全可以采用button和...

    The.Busy.Coders.Guide.to.Android.Development.Version.8.3.epub

    ) 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 ...

Global site tag (gtag.js) - Google Analytics