Android中AutoCompleteTextView自动提示

作者:lijiao 时间:2022-06-21 19:07:36 

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

Android中AutoCompleteTextView自动提示

常用属性

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


<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,自动提示
0
投稿

猜你喜欢

  • 使用Jenkins来构建SVN+Maven项目的实现

    2023-07-30 12:45:22
  • Java上转型和下转型对象

    2021-07-11 13:37:47
  • Android去除AlertDialog的按钮栏的分隔线

    2021-06-06 18:53:54
  • 在Java中使用redisTemplate操作缓存的方法示例

    2023-07-04 09:03:28
  • 使用java技术抓取网站上彩票双色球信息详解

    2022-01-04 14:47:51
  • IDEA标签tabs多行显示的设置

    2023-09-18 06:58:08
  • LRU缓存替换策略及C#实现方法分享

    2021-08-27 04:20:49
  • Java8中接口的新特性使用指南

    2023-01-21 15:19:26
  • Java并发编程之Exchanger方法详解

    2022-08-22 02:44:41
  • Android实现一个丝滑的自动轮播控件实例代码

    2022-01-24 03:08:19
  • Java Springboot如何基于图片生成下载链接

    2023-05-19 19:57:32
  • 简略分析Android的Retrofit应用开发框架源码

    2023-09-17 22:12:30
  • SpringBoot如何实现Tomcat自动配置

    2022-04-28 02:44:10
  • Android NotificationListenerService 通知服务原理解析

    2022-03-29 05:34:29
  • Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

    2023-12-19 08:28:11
  • Android实现将应用崩溃信息发送给开发者并重启应用的方法

    2021-07-25 02:42:14
  • 数字金额大写转换器制作代码分享(人民币大写转换)

    2021-05-25 11:51:25
  • Java Spring之@Async原理案例详解

    2023-05-31 17:13:15
  • Moshi 完美解决Gson在kotlin中默认值空的问题详解

    2022-10-29 00:03:19
  • 全面解析SpringBoot文件上传功能

    2023-02-26 15:55:56
  • asp之家 软件编程 m.aspxhome.com