Android中AutoCompleteTextView的…

来源:互联网 发布:数据库第五版答案 编辑:程序博客网 时间:2024/05/22 01:30

Android中AutoCompleteTextView的使用

将拼音中带有h的自动补全:

思路;1:添加一个AutoCompleteTextView组件

       2:在主程序中设置一个集合(数组),并通过获取组件ID得到一个AutoCompleteTextView组件

       3:通过适配器将数据传入

注意:主要要学会字节编写适配器,设置适合自己的过滤器,这里主要写一下适配器代码,主代码已用蓝色标记

List list = new ArrayList<>();
list.add("北京");
PinyinAdapter adapter = new PinyinAdapter(this, list);
AutoCompleteTextView auto = (AutoCompleteTextView) findViewById(R.id.main_auto);
auto.setAdapter(adapter);
     
适配器代码:
public class PinyinAdapter extends BaseAdapter implements Filterable {
private Context context;
private
List list;
private
List backup;
private
Filter filter;

public PinyinAdapter(Context context, List 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;
}

private 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 strings = new ArrayList<>()
;
for
(String str : backup) {
try {
String pinyin = PinyinHelper.convertToPinyinString(str, "", PinyinFormat.WITHOUT_TONE)
;
if
(pinyin.contains(constraint)) {
strings.add(str)
;
} else {
String shortPinyin = PinyinHelper.getShortPinyin(str)
;
if
(shortPinyin.startsWith(constraint.toString())) {
strings.add(str)
;
}
}
} 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
0 0