<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<AutoCompleteTextView
android:id="@+id/auto_seekTips"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="5dp"
android:completionThreshold="1"
android:dropDownWidth="match_parent"
android:dropDownVerticalOffset="10dp"
android:hint="请输入"
android:inputType="text"
android:lines="1"
android:maxLength="20"
android:paddingLeft="15dp"
android:textSize="15sp" /> </LinearLayout>
package com.chuanye.mybdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable; import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AutoCompleteTextView; import java.util.ArrayList;
import java.util.List; public class Main5Activity extends AppCompatActivity {
//搜索提示控件
private AutoCompleteTextView auto_seektips; private List<Result> resultsList = new ArrayList<>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main5); //将控件实例化
auto_seektips = findViewById(R.id.auto_seekTips); Result result1 = new Result("aaa","aaaa");
Result result2 = new Result("bbb","bbbb");
Result result3 = new Result("ccc","cccc");
Result result4 = new Result("ddd","dddd");
Result result5 = new Result("eee","eeee");
Result result6 = new Result("fff","ffff");
resultsList.add(result1);
resultsList.add(result2);
resultsList.add(result3);
resultsList.add(result4);
resultsList.add(result5);
resultsList.add(result6);
Result result7 = new Result("aaa1","aaaaa");
Result result8 = new Result("bbb1","bbbbb");
Result result9 = new Result("ccc1","ccccc");
Result result10 = new Result("ddd1","ddddd");
Result result11 = new Result("eee1","eeeee");
Result result12 = new Result("fff1","fffff");
resultsList.add(result7);
resultsList.add(result8);
resultsList.add(result9);
resultsList.add(result10);
resultsList.add(result11);
resultsList.add(result12); //自定义适配器的设置
AutoCompleteTextAdapter adapter=new AutoCompleteTextAdapter(resultsList, Main5Activity.this);
auto_seektips.setAdapter(adapter); //AutoCompleteAdapter文本内容变化前 ,变化时,变化后的一个实时监听
//AutoCompleteTextView控件的点击事件
auto_seektips.addTextChangedListener(new TextWatcher() {
@Override//改变之前
public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override//改变时
public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override//改变后
public void afterTextChanged(Editable s) { }
}); //AutoCompleteAdapter点击事件的设置, auto_seektips.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
auto_seektips.setText("");
//获取到过滤后的结果的集合
ArrayList<Result> results=AutoCompleteTextAdapter.newvalues; if (results != null && results.size() > 0){
Result result=results.get(position);
String s=result.getDistrict();
auto_seektips.setText(s);
//将光标放到文本最后
auto_seektips.setSelection(auto_seektips.getText().length());
}else {
auto_seektips.setText("");
} }
}); }
}
package com.chuanye.mybdemo;

import android.content.Context;
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 java.util.ArrayList;
import java.util.List; public class AutoCompleteTextAdapter extends BaseAdapter implements Filterable { private ArrayFilter mFilter;//数据过滤器
private List<Result> mList;//传进来的数据
private ArrayList<Result> mFilteredData;//
private Context context;//上下文
public static ArrayList<Result> newvalues;
public AutoCompleteTextAdapter(List<Result> mList, Context context) {
this.mList = mList;
this.context = context;
} @Override
public int getCount() {
return mList == null ? 0 : mList.size();
} @Override
public Object getItem(int position) {
return mList.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ViewHolder viewHolder;
if (convertView == null) {
view = View.inflate(context, R.layout.seektipitem2, null);
viewHolder = new ViewHolder();
viewHolder.tv_city = view.findViewById(R.id.tv_city);
viewHolder.tv_city1 = view.findViewById(R.id.tv_city1);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = (ViewHolder) view.getTag();
} Result resultlist = mList.get(position);
viewHolder.tv_city.setText(resultlist.getName());
viewHolder.tv_city1.setText(resultlist.getDistrict()); return view;
}
class ViewHolder {
public TextView tv_city;
public TextView tv_city1; } /**
* 在后台线程执行,定义过滤算法
* getFilter()方法会返回一个Filter对象,Filter是一个数据过滤器,其过滤操作是通过performFiltering()方法和publishResult()方法完成的。
* performFiltering()方法进行过滤操作,publishResult()方法用于发表过滤操作结果。
*
* @return
*/
@Override
public Filter getFilter() {
//创建过滤器的对象
if (mFilter == null) {
mFilter = new ArrayFilter();
}
return mFilter;
}
//过滤器类
class ArrayFilter extends Filter {
/**
* @param constraint:用户在输入框中所输入的内容
* @return
*/
@Override//进行过滤操作
protected FilterResults performFiltering(CharSequence constraint) {
//使用过滤操作的结果
FilterResults results = new FilterResults(); if (mFilteredData == null) {
//以一个集合初始化mFilteredData=new ArrayList<String>(mList);//mList(数组容量)为集合
mFilteredData = new ArrayList<>(mList);
}
//如果没有输入内容,则不过滤
if (constraint == null || constraint.length() == 0) {
ArrayList<Result> list = mFilteredData;
results.values = list;
results.count = list.size();
} else {
//过滤的条件
String constraintString = constraint.toString().toLowerCase();
//将传进来的全部数据赋值给filteredValues
ArrayList<Result> filteredValues = mFilteredData;
int count = filteredValues.size(); newvalues = new ArrayList<>(count);
//循环变量数据源,如果有属性满足过滤条件,则添加到result中
for (int i = 0; i < count; i++) {
Result resultData = filteredValues.get(i);
if (resultData != null) { //过滤条件
if (resultData.getDistrict() != null && resultData.getDistrict().startsWith(constraintString)) {
newvalues.add(resultData);
}
} results.values = newvalues;
results.count = newvalues.size();
}
}
return results;
}
@Override//发表过滤操作结果
protected void publishResults(CharSequence constraint, FilterResults results) { mList = (List<Result>) results.values;
if (results.count > 0) {
//重绘当前可见区域
notifyDataSetChanged();
} else {
//重绘控件,还原到初始状态
notifyDataSetInvalidated();
}
}
} }

来源:https://blog.csdn.net/wpn_931/article/details/82799930

Android中控件AutoCompleteTextView的使用方法和一些属性的更多相关文章

  1. Android webview 写入cookie的解决方法以及一些属性设置

    原文地址:https://www.2cto.com/kf/201703/616868.html Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入C ...

  2. Android——控件AutoCompleteTextView 自动提示

    Android:控件AutoCompleteTextView 自动提示 在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,这种效果在Android中是用AutoCompleteTextV ...

  3. Android 控件 -------- AutoCompleteTextView 动态匹配内容,例如 百度搜索提示下拉列表功能

    AutoCompleteTextView 支持基本的自动完成功能,适用在各种搜索功能中,并且可以根据自己的需求设置他的默认显示数据.两个控件都可以很灵活的预置匹配的那些数据,并且可以设置输入多少值时开 ...

  4. Android中控件属性详细总结(转载)

    转载地址:https://www.cnblogs.com/nanguojs/p/5950510.html 1.LinearLayout(线性布局): 可以分为水平线性:android:orientat ...

  5. Android控件——AutoCompleteTextView与MultiAutoCompleteTextView(实现自动匹配输入的内容)

    ------------------------------------AutoCompleteTextView----------------------

  6. Android控件ToggleButton的使用方法

    ToggleButton(开关button)是Android系统中比較简单的一个组件,是一个具有选中和未选择状态双状态的button.而且须要为不同的状态设置不同的显示文本. ToggleButton ...

  7. Android中控件之间添加分割线

    将以下view标签放置在需要分割的两个控件之间: <View android:layout_width=”match_parent” android:layout_height=”1dp” an ...

  8. HTML中禁用表中控件的两种方法与区别

    在网页的制作过程中,我们会经常使用到表单.但是有时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的. 在html中有两种禁用的方法,他们分别是: ...

  9. Android 控件EditText的setOnEditorActionListener方法的理解

    需要注意的是 setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的回 ...

随机推荐

  1. Linux中的关机操作

    shutdown -h now //马上停止服务进行关机 shutdown -h  12:00 .//在12点后进行关机 shutdown -h +10   //在10分钟后进行关机 shutdown ...

  2. 第05组 团队Git现场编程实战

    一.组员职责分工 组员 分工 卢欢(组长) 前后端接口设计 严喜 寻找相关资料 张火标 设计并描述界面原型 钟璐英 编写随笔 周华 填写完善文档 古力亚尔·艾山 填写完善文档 张聪 前后端接口设计 池 ...

  3. Fish eating fruit 沈阳网络赛(树形dp)

    Fish eating fruit \[ Time Limit: 1000 ms \quad Memory Limit: 262144 kB \] 题意 大体的题意就是给出一棵树,求每一对点之间的距离 ...

  4. ABP 后台调用接口 获取返回的数据

    原文:https://www.cnblogs.com/i3yuan/p/10703500.html insert 简单测试: public void test8() { string url = &q ...

  5. 图的遍历 | 1076 bfs

    bfs踩了很多坑才写完.注意:出队时不做是否vis判断,但是要加上vis[出队顶点]=1 .入队时进行判断,并且也要 vis[入队顶点]=1 #include <stdio.h> #inc ...

  6. CentOS7.6安装MYSQL8.0

    1.一般CentOS默认安装了mariadb,所以先查看是否安装mariadb,如果安装就需要先卸载mariadbrpm -qa|grep mariadbrpm -e mariadb-libs --n ...

  7. redis实现mysql的数据缓存

    环境设定base2 172.25.78.12 nginx+phpbase3 172.25.78.13 redis端base4 172.25.78.14 mysql端# 1.在base2(nginx+p ...

  8. 【p6spy学习之一】p6spy使用

    一.介绍 p6spy是一个开源项目,通常使用它来跟踪数据库操作,查看程序运行过程中执行的sql语句.1.原理 p6spy将应用的数据源给劫持了,应用操作数据库其实在调用p6spy的数据源,p6spy劫 ...

  9. 【IntelliJ IDEA学习之九】版本控制之Git和Github

    版本:IntelliJIDEA2018.1.4 [IntelliJ IDEA学习之九]版本控制之Git版本:IntelliJIDEA2018.1.4 一.git知识准备git是目前流行的分布式版本管理 ...

  10. Visual Studio报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PrivateAssemblies/plugin. ...