<?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. CanvasRenderingContext2D.fillText(text, x, y [, maxWidth]);

    CanvasRenderingContext2D.fillText(text, x, y [, maxWidth]); [, maxWidth]的意思是,方括号代表可有可无,有fillText(tex ...

  2. MongoDB executionStats 详细分步查询计划与分步时间(转载)

    mongodb性能分析方法:explain() 为了演示的效果,我们先来创建一个有200万个文档的记录.(我自己的电脑耗了15分钟左右插入完成.如果你想插更多的文档也没问题,只要有耐心等就可以了.) ...

  3. Pandas | 25 文件读写

    Pandas I/O API是一套像pd.read_csv()一样返回Pandas对象的顶级读取器函数. 读取文本文件(或平面文件)的两个主要功能是read_csv()和read_table().它们 ...

  4. CF598: div3解题报告

    CF598:div3解题报告 A: Payment Without Change 思路: 按题意模拟即可. 代码: #include<bits/stdc++.h> using namesp ...

  5. debian/ubuntu安装mssql

    添加源: debian源:deb [arch=amd64] https://packages.microsoft.com/debian/10/prod buster main ubuntu源:deb ...

  6. 【ASP.NET Core分布式项目实战】(四)使用mysql/mysql-server安装mysql

    Docker安装Mysql 拉取镜像 docker pull mysql/mysql-server 运行mysql docker run -d -p : --name mysql01 mysql/my ...

  7. bat脚本清理15天前文件

    @echo offset max_days=15 set log_path="D:\backup_new" forfiles /p %log_path% /s /m *.* /d ...

  8. Scala 在挖财的应用实践

    编者按:本文是根据ArchSummit 大会上挖财资深架构师王宏江的演讲<Scala 在挖财的应用实践>整理而成. 这次分享有三个方面,一是介绍一下挖财当前的开发情况和后端的架构, 二是挖 ...

  9. Gamma阶段项目展示

    Gamma阶段项目展示 一. 团队成员介绍 姓名 Gamma职责 个人博客 张圆宁 PM,后端 个人博客 王文珺 后端 个人博客 牛宇航 后端 个人博客 申化文 后端 个人博客 汪慕澜 测试,部署 个 ...

  10. ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)

    “出于安全考虑,在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据”.这是文档中的原话,也 ...