Autocomplete items disappearing
I have a strange problem regarding suggestion items for an AutocompleteView on Android 2.2. I am using a custom ArrayAdapter and Filter class implementation.
When I type into the AutocompleteView the suggestion drop-down pops up after entering two characters as shown in the following screenshot:
When I enter a third character the drop-down disappears:
After entering a fourth character the suggestion drop-down is displayed again:
I don't understand why the drop-down disappears when an uneven amount of characters is entered.
While debugging I noticed that getView() is called twice when an even amount of characters is entered, but ony once for an uneven amount. Might this be the reason for the faulty behavior?
Here is my source code:
public class AutoCompleteActivity extends Activity {
protected AutoCompleteTextView autoCompleteView;
protected AutoCompleteAdapter suggsAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState开发者_JS百科);
setContentView(R.layout.autocomp);
autoCompleteView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
autoCompleteView.setAdapter(new AutoCompleteAdapter(this, android.R.layout.simple_dropdown_item_1line, new String[1]));
}
private class AutoCompleteAdapter extends ArrayAdapter implements Filterable {
protected LayoutInflater mInflater;
protected Filter filter;
public AutoCompleteAdapter(Context context, int textViewResourceId, String[] items) {
super(context, textViewResourceId, items);
filter = new SuggestionsFilter();
mInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
v = mInflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
}
TextView tt = (TextView) v.findViewById(android.R.id.text1);
tt.setText("Suggestion item");
return v;
}
public Filter getFilter() {
return filter;
}
private class SuggestionsFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
return null;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
notifyDataSetChanged();
}
}
}
}
...and my layout file:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- Pretty hint text, and maxLines -->
<AutoCompleteTextView android:id="@+id/autocomplete"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:imeOptions="actionSearch"
android:layout_toLeftOf="@+id/spinner" />
I found a solution to my problem. I did not set results.count
in my performFiltering
method. Setting this property to e.g. results.count = 1
resolved the issue with the dissapearing suggestion items.
精彩评论