其他分享
首页 > 其他分享> > android – AutoCompleteTextView没有完成括号内的单词

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

希望这可以帮助!

标签:autocompletetextview,android,android-arrayadapter
来源: https://codeday.me/bug/20190923/1815271.html