AutoCompleteTextView和MultiAutoCompleteTextView控件
来源:互联网 发布:马歇尔计划 知乎 编辑:程序博客网 时间:2024/05/17 07:17
layout.xml布局文件
<AutoCompleteTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:completionThreshold="1"//<span style="color: rgb(70, 70, 70); font-family: simsun; font-size: 14px; line-height: 21px; background-color: rgb(248, 236, 216);">android:completionThreshold定义了从第几个字符开始显示候补列表</span><span style="color: rgb(70, 70, 70); font-family: simsun; font-size: 14px; line-height: 21px; background-color: rgb(248, 236, 216);">默认值为2</span> android:id="@+id/main_auto"/> <MultiAutoCompleteTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/main_auto" android:completionThreshold="1" android:id="@+id/main_multi"/>
Entry.java
public class Entry { private String text; private String pinyin; public Entry(String text, String pinyin) { this.text = text; this.pinyin = pinyin; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getPinyin() { return pinyin; } public void setPinyin(String pinyin) { this.pinyin = pinyin; } @Override public String toString() { return text ; }}
AutoAdapter.java
public class AutoAdapter extends BaseAdapter implements Filterable { private Context context; private List<Entry> list; private List<Entry> backup; private Filter filter; public AutoAdapter(Context context, List<Entry> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = new TextView(context); } ((TextView) convertView).setText(list.get(position).getText()); return convertView; } @Override public Filter getFilter() { if (filter == null) { filter = new AutoFilter(); } return filter; } public class AutoFilter extends Filter{ @Override protected FilterResults performFiltering(CharSequence constraint) { if (backup ==null) { backup = new ArrayList<>(list); }// if (constraint != null && constraint.length() > 0) {//// } /* *!TextUtils.isEmpty(constraint)等同于 if (constraint != null && constraint.length() > 0) * * */ FilterResults results = new FilterResults(); if (!TextUtils.isEmpty(constraint)) { List<Entry> entries = new ArrayList<>(); for (Entry entry : backup) { String pinyin = entry.getPinyin(); if (pinyin.startsWith(constraint.toString())) { entries.add(entry); } } results.count = entries.size(); results.values = entries; } else{ results.count =0; results.values = new ArrayList<>(); } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { list.clear(); list.addAll(((Collection<? extends Entry>) results.values)); notifyDataSetChanged(); } }}PinyinAdapter.java
public class PinyinAdapter extends BaseAdapter implements Filterable{ private Context context; private List<String> list; private List<String> backup; private Filter filter; public PinyinAdapter(Context context, List<String> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = new TextView(context); } ((TextView) convertView).setText(list.get(position)); return convertView; } @Override public Filter getFilter() { if (filter == null) { filter = new PinyinFilter(); } return filter; } public class PinyinFilter extends Filter{ @Override protected FilterResults performFiltering(CharSequence constraint) { if (backup == null) { backup = new ArrayList<>(list); } FilterResults results = new FilterResults(); if (!TextUtils.isEmpty(constraint)) { List<String> strings = new ArrayList<>(); for (String s : backup) { try { String pinyin = PinyinHelper.convertToPinyinString(s, "", PinyinFormat.WITHOUT_TONE); if (pinyin.contains(constraint)) { strings.add(s); } else { String shortPinyin = PinyinHelper.getShortPinyin(s); if (shortPinyin.startsWith(constraint.toString())) { strings.add(s); } } } catch (PinyinException e) { e.printStackTrace(); } } results.count = strings.size(); results.values = strings; }else { results.count = 0; results.values = new ArrayList<>(); } return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { list.clear(); list.addAll((Collection<? extends String>) results.values); notifyDataSetChanged(); } }}
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<String> list1 = new ArrayList<>(); list1.add("北京"); list1.add("上海"); list1.add("天京"); list1.add("深圳"); list1.add("河北"); list1.add("河南"); list1.add("山东"); list1.add("山西");// ArrayAdapter<String> adapter1 = new ArrayAdapter<>// (this,android.R.layout.simple_list_item_1,list1); PinyinAdapter adapter1 = new PinyinAdapter(this, list1); List<Entry> list = new ArrayList<>(); list.add(new Entry("北京","beijing")); list.add(new Entry("上海" ,"shanghai")); list.add(new Entry("天津","tianjin")); list.add(new Entry("重庆","chongqing")); list.add(new Entry("河北","hebei")); list.add(new Entry("河南","henan")); list.add(new Entry("山东","shangdong")); AutoAdapter autoAdapter = new AutoAdapter(this, list); AutoCompleteTextView auto = (AutoCompleteTextView) findViewById(R.id.main_auto); auto.setAdapter(autoAdapter); MultiAutoCompleteTextView multi = (MultiAutoCompleteTextView) findViewById(R.id.main_multi); multi.setAdapter(adapter1); MultiAutoCompleteTextView.CommaTokenizer tokenizer = new MultiAutoCompleteTextView.CommaTokenizer(); tokenizer.terminateToken(","); multi.setTokenizer(tokenizer); }}
0 0
- AutoCompleteTextView和MultiAutoCompleteTextView控件
- AutoCompleteTextView和MultiAutoCompleteTextView控件
- Android控件——AutoCompleteTextView和MultiAutoCompleteTextView
- Android控件之AutoCompleteTextView和MultiAutoCompleteTextView
- Android:控件AutoCompleteTextView 和MultiAutoCompleteTextView的使用
- AutoCompleteTextView和MultiAutoCompleteTextView
- AutoCompleteTextView和MultiAutoCompleteTextView
- android AutoCompleteTextView和MultiAutoCompleteTextView
- AutoCompleteTextView和MultiAutoCompleteTextView
- AutoCompleteTextView和MultiAutoCompleteTextView
- AutoCompleteTextView 和 MultiAutoCompleteTextView
- AutoCompleteTextView和MultiAutoCompleteTextView
- AutoCompleteTextView和MultiAutoCompleteTextView
- MultiAutoCompleteTextView和AutoCompleteTextView对比
- AutoCompleteTextView和MultiAutoCompleteTextView
- 初识AutoCompleteTextView和MultiAutoCompleteTextView
- [控件]自动提示 AutoCompleteTextView MultiAutoCompleteTextView
- Android控件---AutoCompleteTextView与MultiAutoCompleteTextView
- 5.0新特性
- Linux命令练习第二关(1)
- 数据解析(三):FastJson
- Mac 上解压缩好压压缩的多个zip分卷方法
- android单选按钮使用
- AutoCompleteTextView和MultiAutoCompleteTextView控件
- 【Linux开发】OpenCV在ARM上的移植
- QQ首位产品经理吴宵光:腾讯17年旅途的14个关键点
- Java版-九大排序算法
- 缺少编译库libgmp.so.3: cannot open shared object file: No such file解决方案
- 编程之美读书笔记-寻找数组中的最大值和最小值
- 高效的批量数据库操作
- Leetcode 97. Interleaving String 交错字符判别 解题报告
- JVM参数配置大全