android - 自动完成文本输入仅显示与第一个字母匹配的项目

标签 android xamarin xamarin.forms xamarin.android autocompletetextview

我正在使用 xamain 的自动完成文本输入控件。 Autocomplete reference

这是我的代码

var autoCompleteOptions = GetAllContacts();
ArrayAdapter autoCompleteAdapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleDropDownItem1Line, autoCompleteOptions);
speedSearch = FindViewById<AutoCompleteTextView>(Resource.Id.AutoCompleteInput);
speedSearch.Adapter = autoCompleteAdapter;

问题是当我尝试在联系人中搜索时,我只能得到仅与第一个字母匹配的建议值。例如,如果 [ [email protected] , [email protected] , [email protected] ] 是联系人列表,如果我使用“xamarin”进行搜索,自动完成功能不会返回任何内容,但如果我使用“bill”进行搜索,它将返回。 我如何更改自动完成的行为,以便搜索数组项中字符串的任何部分,并应将其返回。

最佳答案

您需要创建一个自定义适配器并实现 IFilterable .

Here is the source code of ArrayAdapter( java codes) ,您可以在ArrayFilter.performFiltering()中找到这些代码:

if (valueText.startsWith(prefixString)) {
    newValues.add(value);
} else {
    final String[] words = valueText.split(" ");
    for (String word : words) {
        if (word.startsWith(prefixString)) {
            newValues.add(value);
            break;
        }
    }
}

注意startsWith,这就是为什么当你输入“xa”时无法得到“[email protected]”。您需要将其更改为Contains


这是实现您目标的快速方法。

Here is a class--AutoAdapter (C# codes) 它已经实现了ArrayAdapterIFilterable

您只需复制并粘贴它,然后替换:

            var matches = from i in a.AllItems
                        where i.IndexOf(searchFor) >= 0
                        select i;

与:

            var matches = from i in a.AllItems
                          where i.Contains(searchFor)
                          select i;

最后,在 MainActivity 中使用 AutoAdapter:

    AutoCompleteTextView textView = FindViewById<AutoCompleteTextView>(Resource.Id.autocomplete_country);
    var adapter = new AutoAdapter(this, Resource.Layout.list_item, COUNTRIES);
    textView.Threshold=1;
    textView.Adapter = adapter;

注意:

您还需要查看performFilteringpublishResults Filter 类中的方法

关于android - 自动完成文本输入仅显示与第一个字母匹配的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48491223/

相关文章:

Android - 滑动删除 RecyclerView

android - 下载的图片无法在图库中查看

xamarin - 如何基于其中包含 StackLayout 的 Frame 创建新的 Xamarin 元素?

xamarin.forms - Xamarin 在从 PC 构建时部署旧代码

android - ActivityUnitTestCase 和 startActivity

android - 如何排除 sbt-android-sdk 插件中的许可文件?

c# - 使用Newtonsoft和biding View(MVVM)反序列化JSON

xamarin.ios - Xamarin.Forms 在 UIDocumentInteractionController 中看不到打印选项

c# - 意外错误-Xamarin iOS

java - Xamarin:Java SDK 不包含有效的版本号