Android中AutoCompleteTextView完整示例(二)

简介: MainActivity如下:package cc.testautocompletetextview2;import android.os.Bundle;import android.
MainActivity如下:

package cc.testautocompletetextview2;
import android.os.Bundle;
import android.app.Activity;
/**
 * Demo描述
 * 利用自定义AutoCompleteTextView完成邮箱自动补全功能
 * 
 * 参考资料:
 * 1 http://blog.csdn.net/fx_sky/article/details/9326129
 * 2 http://blog.csdn.net/jwzhangjie/article/details/15771953
 * 3 http://my.eoe.cn/eoe_haozi/archive/519.html
 * 4 http://gundumw100.iteye.com/blog/1056728
 *   Thank you very much
 */
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

}


AutoCompleteTextViewSubClass如下:

package cc.testautocompletetextview2;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Color;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;

public class AutoCompleteTextViewSubClass extends AutoCompleteTextView {
	//可补全的邮箱后缀
	private static final String[] emailSuffix = { "@qq.com","@gmail.com", "@sina.com","@sohu.com"};
	public AutoCompleteTextViewSubClass(Context context){
		super(context);
		init(context);
	}
	public AutoCompleteTextViewSubClass(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}
	
	private void init(Context context){
		final AutoCompleteTextViewAdatper adapter = new AutoCompleteTextViewAdatper(context);
		setAdapter(adapter);
		//设置阈值
		//等同于布局文件中的 android:completionThreshold="2"
		//setThreshold(2);
		addTextChangedListener(new TextWatcher() {
			@Override
			public void afterTextChanged(Editable editable) {
				String inputString = editable.toString();
				System.out.println("--->输入的内容 inputString="+inputString);
				adapter.mList.clear();
				if (inputString.length() > 0) {
					for (int i = 0; i < emailSuffix.length; ++i) {
						adapter.mList.add(inputString + emailSuffix[i]);
					}
				}
				adapter.notifyDataSetChanged();
				showDropDown();
			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,int after) {
				
			}
			@Override
			public void onTextChanged(CharSequence s, int start, int before,int count) {
			}
		});
	}
	
	
	
	//定义AutoCompleteTextView的Adapter继承自BaseAdapter且实现Filterable接口
	class AutoCompleteTextViewAdatper extends BaseAdapter implements Filterable {
		List<String> mList;
		private Context mContext;
		private FilterSubClass mFilter;

		public AutoCompleteTextViewAdatper(Context context) {
			mContext = context;
			mList = new ArrayList<String>();
		}

		@Override
		public int getCount() {
			return mList == null ? 0 : mList.size();
		}

		@Override
		public Object getItem(int position) {
			return mList == null ? null : mList.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			if (convertView == null) {
				TextView textView = new TextView(mContext);
				textView.setTextColor(Color.RED);
				textView.setTextSize(30);
				convertView = textView;
			}
			TextView textView = (TextView) convertView;
			textView.setText(mList.get(position));
			return textView;
		}

		@Override
		public Filter getFilter() {
			if (mFilter == null) {
				mFilter = new FilterSubClass();
			}
			return mFilter;
		}

		// 只有满足setThreshold(2)这个阈值时才会执行performFiltering()
		private class FilterSubClass extends Filter {
			@Override
			protected FilterResults performFiltering(CharSequence constraint) {
				System.out.println("--->过滤 constraint=" + constraint.toString());
				FilterResults results = new FilterResults();
				if (mList == null) {
					mList = new ArrayList<String>();
				}
				results.values = mList;
				results.count = mList.size();
				return results;
			}

			@Override
			protected void publishResults(CharSequence constraint,
					FilterResults results) {
				if (results.count > 0) {
					notifyDataSetChanged();
				} else {
					notifyDataSetInvalidated();
				}
			}
		}
	}
}


main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="自定义AutoCompleteTextView使用示例" 
        android:layout_centerHorizontal="true"/>
    
    <cc.testautocompletetextview2.AutoCompleteTextViewSubClass 
        android:id="@+id/autoCompleteTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dip"
        android:completionHint="请选择:"
        android:dropDownVerticalOffset="2dip"
        android:dropDownHorizontalOffset="2dip"
        android:completionThreshold="2"
    />

</RelativeLayout>



相关文章
|
4月前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
63 1
|
8月前
|
开发工具 Android开发
技术经验分享:Android编译命令m、mm、mmm区别及工程搭建示例
技术经验分享:Android编译命令m、mm、mmm区别及工程搭建示例
524 0
|
9月前
|
Android开发
Android 高通平台集成无源码apk示例
Android 高通平台集成无源码apk示例
135 0
|
9月前
|
存储 算法 开发工具
OpenCV 安卓编程示例:1~6 全
OpenCV 安卓编程示例:1~6 全
180 0
|
编解码 监控 API
Android平台GB28181设备接入侧音频采集推送示例
GB/T28181是广泛应用于视频监控行业的标准协议规范,可以在不同设备之间实现互联互通。今天我们主要探讨Android平台的Audio采集部分。
145 1
|
Android开发
Android 自动补齐文本框AutoCompleteTextView的使用
Android 自动补齐文本框AutoCompleteTextView的使用
89 0
|
网络协议 Linux API
Android C++ 系列:Linux Socket 编程(三)CS 模型示例
服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于 监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服 务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK 段,服务器收到后从accept()返回。
185 0
|
Java 图形学 Android开发
Android/iOS内嵌Unity开发示例
Android/iOS内嵌Unity开发示例
562 0
Android/iOS内嵌Unity开发示例
Java&Android获取当前日期、时间、星期几、获取指定格式的日期时间、时间戳工具类包含使用示例
Java&Android获取当前日期、时间、星期几、获取指定格式的日期时间、时间戳工具类包含使用示例
757 0
Java&Android获取当前日期、时间、星期几、获取指定格式的日期时间、时间戳工具类包含使用示例
|
XML 前端开发 数据处理
Android——MVC、MVP、MVVM框架实现登录示例
MVC 描述 缺点 优点 MVP 效果图 描述 缺点 优点 代码解析 视图效果图 建立实体类 建立实体类接口 实现实体类接口 设置P层 建立交互接口 数据绑定 MVVM 效果图 描述 代码解析 导入dataBinding 实体类 建立viewmodel xml绑定数据 视图与数据绑定
473 0
Android——MVC、MVP、MVVM框架实现登录示例

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    Android历史版本与APK文件结构
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 1
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    24
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    33
  • 3
    Android历史版本与APK文件结构
    121
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    57
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 8
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    119
  • 10
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
    29