AutoCompleteAdapter:AutoCompleteTextView когда-нибудь показать предложение, но когда-то не
public class AutoCompleteAdapter extends ArrayAdapter<String> {
private LayoutInflater inflater;
private List<String> mData;
private int resourceId;
public AutoCompleteAdapter(Context context, int textViewResourceId,
List<String> objects) {
super(context, textViewResourceId, objects);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mData = objects;
resourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView;
if (convertView == null){
convertView = inflater.inflate(resourceId, null);
}
textView = (TextView)convertView.findViewById(R.id.textView1);
textView.setText(mData.get(position));
System.out.println("getView:" + mData);
return convertView;
}
@Override
public Filter getFilter() {
Filter custom_filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults f = new FilterResults();
ArrayList<String> matchItems = new ArrayList<String>();
if (constraint != null){
for (String item : MainActivity.COUNTRIES){
if (item.toLowerCase().contains(constraint.toString().toLowerCase())){/////if contain the string
matchItems.add(item);
}
}
}
f.values = matchItems;
return f;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<String> matchItems = (ArrayList<String>) results.values;
mData.clear();
mData.addAll(matchItems);
System.out.println("publishResults ===" + mData); //data can be printed out here every time
notifyDataSetChanged();
}
};
return custom_filter;
}
}
MainActivity класс:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AutoCompleteAdapter adapter = new AutoCompleteAdapter(this, R.layout.row, new ArrayList<String>());
final AutoCompleteTextView textView = (AutoCompleteTextView)
findViewById(R.id.autoCompleteTextView1);
textView.setAdapter(adapter);
}
public static final String[] COUNTRIES = new String[] {
"Belgium", "France", "Italy", "Germany", "Spain"
};
}
activity_main.xml:
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/abc"
android:layout_marginRight="16dp"
android:layout_marginTop="50dp"
android:ems="10"
android:text=""
android:completionThreshold="1"
android:textColor="@android:color/black"
android:textColorHint="@android:color/black">
<requestFocus />
</AutoCompleteTextView>
row.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
Теперь мой список «Бельгия», «Франция», «Италия», «Германия», «Испания», если я типа «ма», «Германия» будет отображаться в раскрывающемся списке, но когда я набираю еще один символ «n», чтобы стать «человеком», выпадающее изображение исчезает, после этого, если я продолжу, введите еще один символ «y», чтобы стать «многими», «Германия» снова появится. Выпадающий список AutoCompleteTextView
будет отображаться как включен и выключен, даже если совпадение найдено. Что случилось с моим кодом?
Спасибо! Я почти снимаю все мои волосы. Я наконец выясню проблему. Моя проблема возникает только в платформе 2.2, но когда я протестировал ее на платформе 4.0, проблема исчезла. Но мне все еще нужно поддерживать 2.2 и выше, поэтому, наконец, я обнаружил, что после того, как я ввел этот оператор 'filterResults.count = resultList.size();', то он работает. Как это глупо ... Я читал API doc много раз, но он никогда не упоминает об этом ... – GMsoF
Что такое адаптер? –