Android中AutoCompleteTextView自动提示
作者:lijiao 时间:2022-06-21 19:07:36
我们使用控件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,自动提示
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