1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.  
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical">
  7. <AutoCompleteTextView
  8. android:id="@+id/auto_seekTips"
  9. android:layout_width="match_parent"
  10. android:layout_height="45dp"
  11. android:layout_marginLeft="20dp"
  12. android:layout_marginRight="20dp"
  13. android:layout_marginTop="5dp"
  14. android:completionThreshold="1"
  15. android:dropDownWidth="match_parent"
  16. android:dropDownVerticalOffset="10dp"
  17. android:hint="请输入"
  18. android:inputType="text"
  19. android:lines="1"
  20. android:maxLength="20"
  21. android:paddingLeft="15dp"
  22. android:textSize="15sp" />
  23.  
  24. </LinearLayout>
  1. package com.chuanye.mybdemo;
  2.  
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.text.Editable;
  6.  
  7. import android.text.TextWatcher;
  8. import android.view.View;
  9. import android.widget.AdapterView;
  10. import android.widget.AutoCompleteTextView;
  11.  
  12. import java.util.ArrayList;
  13. import java.util.List;
  14.  
  15. public class Main5Activity extends AppCompatActivity {
  16. //搜索提示控件
  17. private AutoCompleteTextView auto_seektips;
  18.  
  19. private List<Result> resultsList = new ArrayList<>();
  20.  
  21. @Override
  22. protected void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.activity_main5);
  25.  
  26. //将控件实例化
  27. auto_seektips = findViewById(R.id.auto_seekTips);
  28.  
  29. Result result1 = new Result("aaa","aaaa");
  30. Result result2 = new Result("bbb","bbbb");
  31. Result result3 = new Result("ccc","cccc");
  32. Result result4 = new Result("ddd","dddd");
  33. Result result5 = new Result("eee","eeee");
  34. Result result6 = new Result("fff","ffff");
  35. resultsList.add(result1);
  36. resultsList.add(result2);
  37. resultsList.add(result3);
  38. resultsList.add(result4);
  39. resultsList.add(result5);
  40. resultsList.add(result6);
  41. Result result7 = new Result("aaa1","aaaaa");
  42. Result result8 = new Result("bbb1","bbbbb");
  43. Result result9 = new Result("ccc1","ccccc");
  44. Result result10 = new Result("ddd1","ddddd");
  45. Result result11 = new Result("eee1","eeeee");
  46. Result result12 = new Result("fff1","fffff");
  47. resultsList.add(result7);
  48. resultsList.add(result8);
  49. resultsList.add(result9);
  50. resultsList.add(result10);
  51. resultsList.add(result11);
  52. resultsList.add(result12);
  53.  
  54. //自定义适配器的设置
  55. AutoCompleteTextAdapter adapter=new AutoCompleteTextAdapter(resultsList, Main5Activity.this);
  56. auto_seektips.setAdapter(adapter);
  57.  
  58. //AutoCompleteAdapter文本内容变化前 ,变化时,变化后的一个实时监听
  59. //AutoCompleteTextView控件的点击事件
  60. auto_seektips.addTextChangedListener(new TextWatcher() {
  61. @Override//改变之前
  62. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
  63.  
  64. }
  65.  
  66. @Override//改变时
  67. public void onTextChanged(CharSequence s, int start, int before, int count) {
  68.  
  69. }
  70.  
  71. @Override//改变后
  72. public void afterTextChanged(Editable s) {
  73.  
  74. }
  75. });
  76.  
  77. //AutoCompleteAdapter点击事件的设置,
  78.  
  79. auto_seektips.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  80. @Override
  81. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  82. auto_seektips.setText("");
  83. //获取到过滤后的结果的集合
  84. ArrayList<Result> results=AutoCompleteTextAdapter.newvalues;
  85.  
  86. if (results != null && results.size() > 0){
  87. Result result=results.get(position);
  88. String s=result.getDistrict();
  89. auto_seektips.setText(s);
  90. //将光标放到文本最后
  91. auto_seektips.setSelection(auto_seektips.getText().length());
  92. }else {
  93. auto_seektips.setText("");
  94. }
  95.  
  96. }
  97. });
  98.  
  99. }
  100. }
  1. package com.chuanye.mybdemo;
  2.  
  3. import android.content.Context;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.BaseAdapter;
  7. import android.widget.Filter;
  8. import android.widget.Filterable;
  9. import android.widget.TextView;
  10.  
  11. import java.util.ArrayList;
  12. import java.util.List;
  13.  
  14. public class AutoCompleteTextAdapter extends BaseAdapter implements Filterable {
  15.  
  16. private ArrayFilter mFilter;//数据过滤器
  17. private List<Result> mList;//传进来的数据
  18. private ArrayList<Result> mFilteredData;//
  19. private Context context;//上下文
  20. public static ArrayList<Result> newvalues;
  21. public AutoCompleteTextAdapter(List<Result> mList, Context context) {
  22. this.mList = mList;
  23. this.context = context;
  24. }
  25.  
  26. @Override
  27. public int getCount() {
  28. return mList == null ? 0 : mList.size();
  29. }
  30.  
  31. @Override
  32. public Object getItem(int position) {
  33. return mList.get(position);
  34. }
  35.  
  36. @Override
  37. public long getItemId(int position) {
  38. return position;
  39. }
  40.  
  41. @Override
  42. public View getView(int position, View convertView, ViewGroup parent) {
  43. View view;
  44. ViewHolder viewHolder;
  45. if (convertView == null) {
  46. view = View.inflate(context, R.layout.seektipitem2, null);
  47. viewHolder = new ViewHolder();
  48. viewHolder.tv_city = view.findViewById(R.id.tv_city);
  49. viewHolder.tv_city1 = view.findViewById(R.id.tv_city1);
  50. view.setTag(viewHolder);
  51. } else {
  52. view = convertView;
  53. viewHolder = (ViewHolder) view.getTag();
  54. }
  55.  
  56. Result resultlist = mList.get(position);
  57. viewHolder.tv_city.setText(resultlist.getName());
  58. viewHolder.tv_city1.setText(resultlist.getDistrict());
  59.  
  60. return view;
  61. }
  62. class ViewHolder {
  63. public TextView tv_city;
  64. public TextView tv_city1;
  65.  
  66. }
  67.  
  68. /**
  69. * 在后台线程执行,定义过滤算法
  70. * getFilter()方法会返回一个Filter对象,Filter是一个数据过滤器,其过滤操作是通过performFiltering()方法和publishResult()方法完成的。
  71. * performFiltering()方法进行过滤操作,publishResult()方法用于发表过滤操作结果。
  72. *
  73. * @return
  74. */
  75. @Override
  76. public Filter getFilter() {
  77. //创建过滤器的对象
  78. if (mFilter == null) {
  79. mFilter = new ArrayFilter();
  80. }
  81. return mFilter;
  82. }
  83. //过滤器类
  84. class ArrayFilter extends Filter {
  85. /**
  86. * @param constraint:用户在输入框中所输入的内容
  87. * @return
  88. */
  89. @Override//进行过滤操作
  90. protected FilterResults performFiltering(CharSequence constraint) {
  91. //使用过滤操作的结果
  92. FilterResults results = new FilterResults();
  93.  
  94. if (mFilteredData == null) {
  95. //以一个集合初始化mFilteredData=new ArrayList<String>(mList);//mList(数组容量)为集合
  96. mFilteredData = new ArrayList<>(mList);
  97. }
  98. //如果没有输入内容,则不过滤
  99. if (constraint == null || constraint.length() == 0) {
  100. ArrayList<Result> list = mFilteredData;
  101. results.values = list;
  102. results.count = list.size();
  103. } else {
  104. //过滤的条件
  105. String constraintString = constraint.toString().toLowerCase();
  106. //将传进来的全部数据赋值给filteredValues
  107. ArrayList<Result> filteredValues = mFilteredData;
  108. int count = filteredValues.size();
  109.  
  110. newvalues = new ArrayList<>(count);
  111. //循环变量数据源,如果有属性满足过滤条件,则添加到result中
  112. for (int i = 0; i < count; i++) {
  113. Result resultData = filteredValues.get(i);
  114. if (resultData != null) {
  115.  
  116. //过滤条件
  117. if (resultData.getDistrict() != null && resultData.getDistrict().startsWith(constraintString)) {
  118. newvalues.add(resultData);
  119. }
  120. }
  121.  
  122. results.values = newvalues;
  123. results.count = newvalues.size();
  124. }
  125. }
  126. return results;
  127. }
  128. @Override//发表过滤操作结果
  129. protected void publishResults(CharSequence constraint, FilterResults results) {
  130.  
  131. mList = (List<Result>) results.values;
  132. if (results.count > 0) {
  133. //重绘当前可见区域
  134. notifyDataSetChanged();
  135. } else {
  136. //重绘控件,还原到初始状态
  137. notifyDataSetInvalidated();
  138. }
  139. }
  140. }
  141.  
  142. }

来源: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 Boot 各版本的Java版本要求

    Spring Boot 各版本的Java版本要求 Spring Boot 与 Java 对应版本,以下表格由官方网站总结. 官网:https://spring.io/projects/spring-b ...

  2. 排序算法-计数排序(Java)

    package com.rao.sort; import java.util.Arrays; /** * @author Srao * @className CountSort * @date 201 ...

  3. 【java】String与Date转换

    String转Date            String date="";            SimpleDateFormat format=new SimpleDateFo ...

  4. Linux系统中python默认版本为python2.7,修改为python3 项目上传码云

    # 查询系统本系统中安装的python版本 ls -l /usr/bin/python* 1.在虚拟机上新建虚拟环境 # 系统中python默认版本为python2.,可以将其修改为python3 # ...

  5. ES6基础-ES6 class

    作者 | Jeskson 来源 | 达达前端小酒馆 ES - Class 类和面向对象: 面向对象,即万物皆对象,面向对象是我们做开发一种的方式,开发思维,面向对象的思维中万物皆对象,以人作为例子,它 ...

  6. Salesforce 开发整理(六) Visualforce分页

    分页的实现总体上分真分页和假分页. 所谓真分页指页面上列出来的数据就是实际查询的数据,假分页则是无论页面上一次显示多少条记录,实际上后台已经加载了所有的记录,分页只是为了展示给用户查看.今天分享一个V ...

  7. listings技巧

    1. \lstdefinestyle 参考 https://blog.csdn.net/ProgramChangesWorld/article/details/52142313 我们在使用listin ...

  8. Spring Security教程(二)

    上一篇博客中,Spring Security教程(一),我把用户信息和权限信息放到了xml文件中,这是为了演示如何使用最小的配置就可以使用Spring Security,而实际开发中,用户信息和权限信 ...

  9. Node节点如何加入K8S集群

    k8s集群中,有时候发现有些节点状态为 NotReady,如何修复为Ready状态呢? [root@k8s-master~]# kubectl get nodes NAME STATUS ROLES ...

  10. odoo @api.constrains _sql_constrains

    实现机制: @api.constrains('fields') 服务器启动时将模型中的所有约束方法注册到对象池中: 在create.write时会根据创建或修改的fields检查是否有对应的约束方法, ...