android – AutoCompleteTextView没有完成括号内的单词

我已经实现了AutoCompleteTextView,如下所示:

MainActivity.java

...
    public static String[] myData=new String[]{"Africa (AF)","America (AFM)","Apple (AMP)"};
    text=(AutoCompleteTextView)v.findViewById(R.id.first_state);
    ArrayAdapter adapter = new ArrayAdapter(getActivity(),R.layout.autocompletetextview_row,R.id.textViewItem,myData);

    text.setAdapter(adapter);
    text.setThreshold(1);
    text.setonItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {

            selected_station = (String)parent.getItemAtPosition(position);
            //Todo Do something with the selected text
        }
    });

在AutoCompleteTextView的布局中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    android:padding="10dp" >
    <TextView
        android:id="@+id/textViewItem"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="Item name here..."
        android:textColor="#000000"
        android:textSize="20sp" />
 </RelativeLayout>

当我输入类似“af ..”时,它显示非洲(AF)选择但不是美国(AFM).

数据只是一个示例数据.这不是我使用AutoCompleteTextView只有3个项目.

编辑:当我删除括号时,它正常工作.但我需要保留括号以供进一步使用.

解决方法:

ArrayAdapter过滤器的认实现是搜索单词的开头(用空格分隔),我的意思是它使用startsWith.您需要实现一个ArrayFilter,它使用contains和startsWith.

您的问题将通过以下步骤解决

>从here下载ArrayAdapter.java文件
>将该文件添加到项目中(例如,您可以通过将文件重命名为CustomArrayAdapter.java来重构).
>在文件中,您将找到一个私有类ArrayFilter.然后,添加valueText.contains(prefixString)和words [k] .contains(prefixString),如下所示:

            if (valueText.startsWith(prefixString) || valueText.contains(prefixString)) {
                newValues.add(value);
            } else {
                final String[] words = valueText.split(" ");
                final int wordCount = words.length;
                // Start at index 0, in case valueText starts with space(s)
                for (int k = 0; k < wordCount; k++) {
                    if (words[k].startsWith(prefixString) || words[k].contains(prefixString)) {
                        newValues.add(value);
                        break;
                    }
                }
            }

>将自定义的ArrayAdapter用于AutoCompleteTextView

这是结果截图:

AutoCompleteTextView

希望这可以帮助!

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...