自动完成项目消失 [英] Autocomplete items disappearing
问题描述
我有一个关于Android 2.2上的AutocompleteView的建议项的奇怪问题。我使用自定义的ArrayAdapter和Filter类实现。
当我输入AutocompleteView后,在输入两个字符后弹出建议下拉菜单,如下图所示:
当我输入第三个字符时,下拉列表消失:
我不明白为什么当输入的字符数量不一样时,下拉列表就消失了。
在调试的时候,我注意到当输入偶数字符时,getView()被调用两次,但是一次输入的次数不一致。可能这是错误行为的原因吗?
这是我的源代码:
public class AutoCompleteActivity extends Activity {
protected AutoCompleteTextView autoCompleteView;
protected AutoCompleteAdapter suggsAdapter;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
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;
保护过滤器;
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(建议项目);
return v;
}
public Filter getFilter(){
return filter;
$ b私有类SuggestionFilter扩展过滤{
@覆盖
保护FilterResults performFiltering(CharSequence约束){
返回null;
$ b @Override
protected void publishResults(CharSequence约束,FilterResults结果){
notifyDataSetChanged();
code $ pre
$ b }
...和我的布局文件:
< LinearLayout
xmlns :android =http://schemas.android.com/apk/res/android
android:layout_width =fill_parent
android:layout_height =fill_parent
android:orientation = 垂直>
<! - 漂亮的提示文字和maxLines - >
< AutoCompleteTextView android:id =@ + id / autocomplete
android:layout_width =fill_parent
android:layout_height =wrap_content$ b $ android:inputType =text
android:maxLines =1
android:imeOptions =actionSearch
android:layout_toLeftOf =@ + id / spinner/>
解决方案我找到了解决我的问题。我没有在 performFiltering
方法中设置 results.count
。将此属性设置为 results.count = 1
解决了消除建议项目的问题。
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);
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.
这篇关于自动完成项目消失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!