自动完成项目消失 [英] Autocomplete items disappearing

查看:210
本文介绍了自动完成项目消失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个关于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆