Tôi đã tìm thấy giải pháp cho điều đó, nhờ Google và tìm kiếm trong hai ngày. Như @ torque203 đã đề xuất, tôi đã triển khai Bộ điều hợp tùy chỉnh của riêng mình. Đầu tiên xác định một tập tin XML mới để tùy chỉnh Item trong bộ chuyển đổi:
autocomplete_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:id="@+id/lbl_name" />
</RelativeLayout>
Tạo lớp mới cho Tên của bạn:
Tên
public class Names {
public String name;
}
NamesAdapter
public class NamesAdapter extends ArrayAdapter<Names> {
Context context;
int resource, textViewResourceId;
List<Names> items, tempItems, suggestions;
public NamesAdapter(Context context, int resource, int textViewResourceId, List<Names> items) {
super(context, resource, textViewResourceId, items);
this.context = context;
this.resource = resource;
this.textViewResourceId = textViewResourceId;
this.items = items;
tempItems = new ArrayList<Names>(items); // this makes the difference.
suggestions = new ArrayList<Names>();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.autocomplete_item, parent, false);
}
Names names = items.get(position);
if (names != null) {
TextView lblName = (TextView) view.findViewById(R.id.lbl_name);
if (lblName != null)
lblName.setText(names.name);
}
return view;
}
@Override
public Filter getFilter() {
return nameFilter;
}
/**
* Custom Filter implementation for custom suggestions we provide.
*/
Filter nameFilter = new Filter() {
@Override
public CharSequence convertResultToString(Object resultValue) {
String str = ((Names) resultValue).name;
return str;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if (constraint != null) {
suggestions.clear();
for (Names names : tempItems) {
if (names.name.toLowerCase().contains(constraint.toString().toLowerCase())) {
suggestions.add(names);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
List<Names> filterList = (ArrayList<Names>) results.values;
if (results != null && results.count > 0) {
clear();
for (Names names : filterList) {
add(names);
notifyDataSetChanged();
}
}
}
};
}
SearchActivity (hoặc hoạt động chính của bạn)
....
List<Names> namesList = //your names list;
NamesAdapter namesAdapter = new NamesAdapter(
SearchActivity.this,
R.layout.activity_search,
R.id.lbl_name,
namesList
);
//set adapter into listStudent
autoCompleteTextView.setAdapter(namesAdapter);
autoCompleteTextView.showDropDown();
...
Nguồn
2016-01-28 17:21:51
Xin vui lòng đọc câu trả lời của tôi tại http://stackoverflow.com/questions/32926034/autocompletetextview-not-completing-words-inside-parentheses/32928446#32928446 – BNK
Hãy xem giải pháp này cũng: http: // stackoverflow. com/a/37298258/1808829 –