<?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. 【PL/SQL】左侧窗口没了

  2. Debian 安装 yum

    sudo apt-get updatesudo apt-get install build-essentialsudo apt-get install yum

  3. 模拟赛 T3 DFS序+树状数组+树链的并+点权/边权技巧

    题意:给定一颗树,有 $m$ 次操作. 操作 0 :向集合 $S$ 中加入一条路径 $(p,q)$,权值为 $v$ 操作 1 :给定一个点集 $T$,求 $T$ 的并集与 $S$ 中路径含交集的权和. ...

  4. Linux磁盘管理——分区和文件系统

    1.分区类型 (1)主分区:最多只能有四个(主分区加扩展分区一共有四个). (2)扩展分区:最多有一个,是主分区中的其中一个.不能存储数据也不能格式化,必须再分成逻辑分区才能使用. (3)逻辑分区:是 ...

  5. nodejs内存溢出 FATAL ERROR: CALL_AND_RETRY_0 Allocation failed – process out of memory

    spa项目整体迁移转为ssr后,改动之后部署一切还好,就是突然有一天访问人数太多,node进程很容易就挂了自动重启. 最后经过压力测试,考虑到是堆内存溢出的问题,就报错误:FATAL ERROR: C ...

  6. bzoj2839 集合计数 组合计数 容斥原理|题解

    集合计数 题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007.(是 ...

  7. 缓存穿透 & 缓存击穿 & 缓存雪崩

    参考文档: 缓存穿透和缓存失效的预防和解决:https://blog.csdn.net/qq_16681169/article/details/75138876 缓存穿透 缓存穿透是指查询一个一定不存 ...

  8. concurrent (二)AQS

    参考文档: https://www.cnblogs.com/waterystone/p/4920797.html

  9. react-native项目如何在xcode上打开ios项目

    如何打开ios项目? 导入或者双击ios/thirtydays.xcodeproj

  10. .net core 在 View 中使用 Jquery 无效问题

    问题描述: 在 View 视图中使用模板 _Layout.cshtml,其中模板已经调用了 Jquery.js ,但是在 View 视图下写 js 无效.后来通过浏览器查看自己写的 js 压根没加载出 ...