<?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. spring学习2

    使用注解配置spring 步骤: 1. 导包4(core/bean/context/spel)+1(logging)+spring-aop包(新版spring需要导入这个包) 2. 为主配置文件引入新 ...

  2. 绕过dva dispatch在更新model数据的异步

    我的业务是在更新选择列表后,马上进行总价格更新,那么由于model的更新不是实时的,因此我在this.props得到的值还是旧值,解决办法就是通过dispatch成功返回的值,传给计算函数 handl ...

  3. 12 opencv图像合成

    #include < stdio.h > #include < opencv2\opencv.hpp > #include < opencv2\stitching.hpp ...

  4. docker的简单操作和端口映射

    一:简介 Docker镜像 在Docker中容器是基于镜像启动的 镜像是启动容器的核心 镜像采用分层设计,最顶层为读写层 使用快照COW技术,确保底层不丢失 通过ifconfig(ip  a)来查看d ...

  5. Checking Types Against the Real World in TypeScript

    转自:https://www.olioapps.com/blog/checking-types-real-world-typescript/ This is a follow-up to Type-D ...

  6. I/O管理杂记

    这是一篇杂记,记录了操作系统层面与I/O管理的零散知识点,用于温习使用.由于I/O管理是一个很大的范畴,后续会不断按照自己的生产需求来补充用的到的知识点.计算机系统是人造系统,没有绝对的对错(相对于自 ...

  7. c++primer(第五版) 阅读笔记

    快速阅读一遍c++ primer,复习c++ 1.本书代码:http://www.informit.com/store/c-plus-plus-primer-9780321714114 2.本书结构:

  8. c语言之连接符

    c语言之连接符 1.连接符 连接符的概念是结合define预编译指令的使用技巧,用户可以向define中传入字符串来调用不同功能的函数. 2.代码例子 #include <stdio.h> ...

  9. 【视频开发】【计算机视觉】相机标定(Camera calibration)原理、步骤

    相机标定(Camera calibration)原理.步骤 author@jason_ql(lql0716)  http://blog.csdn.net/lql0716 在图像测量过程以及机器视觉应用 ...

  10. 读懂 ECMA 规格

    一般我们都不关心 ECMA 规范,只需要学习怎么使用就好了.但有时候遇到一些难以解释的问题/现象,就不得不看一下规范是如何要求实现的了.规范内容庞杂,理解其中的术语有利于我们快速看懂规范. Envir ...