Android中AutoCompleteTextView自动提示

发布时间 - 2026-01-10 21:50:20    点击率:

我们使用控件AutoCompleteTextView 自动提示时,有时需要设置BaseAdapter,设置BaseAdapter时,需要实现Filterable,手动进行筛选。

常用属性

布局只设置了至少输入一个字符显示提示

<AutoCompleteTextView
    android:id="@+id/at"
    android:completionThreshold="1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

 private List<String> allData = new ArrayList<>();

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    allData.add("aa");
    allData.add("bb");
    allData.add("cc");
    allData.add("dd");
    allData.add("abc");
    allData.add("bcd");
    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.at);
    MyAdapter adapter = new MyAdapter();
    textView.setAdapter(adapter);
  }

adapter适配器代码

 class MyAdapter extends BaseAdapter implements Filterable {
    DataFilter filter;
    ArrayList<String> data;

    @Override
    public int getCount() {
      if (data != null && data.size() > 0) {
        return data.size();
      }
      return 0;
    }

    @Override
    public Object getItem(int i) {
      return null;
    }

    @Override
    public long getItemId(int i) {
      return 0;
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
      TextView textView = new TextView(MainActivity.this);
      textView.setText(data.get(position));
      return textView;
    }

    @Override
    public Filter getFilter() {
      if (filter == null) {
        filter = new DataFilter();
      }
      return filter;
    }

    private class DataFilter extends Filter {

      @Override
      protected FilterResults performFiltering(CharSequence prefix) {
        //查询结果保存到FilterResults对象里
        FilterResults results = new FilterResults();
        List<String> queryData = new ArrayList<>();
        for (int i = 0; i < allData.size(); i++) {
          if (allData.get(i).contains(prefix.toString())) {
            queryData.add(allData.get(i));
          }
        }
        results.values = queryData;
        results.count = queryData.size();
        return results;
      }

      /**
       * 更新UI
       */
      @Override
      protected void publishResults(CharSequence constraint, FilterResults results) {

        List<String> queryData = (List<String>) results.values;
        if (data == null) {
          data = new ArrayList<>();
        }
        if (data.size() > 0) {
          data.clear();
        }

        if (queryData != null && queryData.size() > 0)
          for (String string : queryData) {
            data.add(string);
            notifyDataSetChanged();
          }
      }

    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # AutoCompleteTextView  # 自动提示  # Android用户输入自动提示控件AutoCompleteTextView使用方法  # Android自动获取输入短信验证码库AutoVerifyCode详解  # Android AutoWrapTextView中英文排版问题的解决方法  # Android中使用 AutoCompleteTextView 实现手机号格式化附带清空历史的操作  # Android自动编辑文本框(AutoCompleteTextView)使用方法详解  # Android仿新浪微博oauth2.0授权界面实现代码(2)  # android中AutoCompleteTextView的简单用法(实现搜索历史)  # Android仿百度谷歌搜索自动提示框AutoCompleteTextView简单应用示例  # 关于Android HTML5 audio autoplay无效问题的解决方案  # Android AutoCompleteTextView自动提示文本框实例代码  # Android App开发的自动化测试框架UI Automator使用教程  # Android中AutoCompleteTextView与TextWatcher结合小实例  # Android AutoValue使用和扩展库  # 查询结果  # 大家多多  # void  # protected  # onCreate  # savedInstanceState  # Bundle  # Override  # List  # private  # String  # ArrayList  # allData  # super  # cc  # bb  # dd  # bcd  # abc  # aa 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  jQuery中的100个技巧汇总  利用JavaScript实现拖拽改变元素大小  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  linux top下的 minerd 木马清除方法  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  如何快速搭建FTP站点实现文件共享?  JavaScript中的标签模板是什么_它如何扩展字符串功能  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Bootstrap CSS布局之列表  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  jquery插件bootstrapValidator表单验证详解  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  如何正确下载安装西数主机建站助手?  西安专业网站制作公司有哪些,陕西省建行官方网站?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  phpredis提高消息队列的实时性方法(推荐)  如何快速选择适合个人网站的云服务器配置?  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  如何破解联通资金短缺导致的基站建设难题?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  如何用低价快速搭建高质量网站?  如何在Windows虚拟主机上快速搭建网站?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel如何使用查询构建器?(Query Builder高级用法)  Laravel怎么实现验证码(Captcha)功能  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  实例解析angularjs的filter过滤器  如何在万网ECS上快速搭建专属网站?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  高性价比服务器租赁——企业级配置与24小时运维服务  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何快速登录WAP自助建站平台?  如何用PHP快速搭建高效网站?分步指南  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  再谈Python中的字符串与字符编码(推荐)  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环