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
原创粉丝点击