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/

相关文章:

xamarin - 根据屏幕尺寸自定义命名字体大小

c# - 在另一个 IList 数据模型中存储 Array 或 IList

javascript - React-Native:for 循环中的 this.something.map 可以访问 .json 文件中数据数组中的数据..有人可以建议一个示例代码吗?

android - 保护我的 Google App Engine API 端点

从 Play 商店安装时,Android cordova 应用程序崩溃

c# - 为什么这个 'Label' 是一个字段?

android - Android 2.2 中的棘轮框架滚动

xamarin - DisplayAlert 导致 Xamarin 应用崩溃

c# - 如何更改 iOS 和 Android 步进器的颜色?

c# - 如何在运行时在 Xamarin.Forms 中动态更改图像的位置(x 和 y)?