gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 09:29:20 26 4
gpt4 key购买 nike

我正在使用 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;

问题是当我尝试在我的联系人中搜索时,我只得到与第一个字母匹配的建议值。例如,如果 [paul@email.com, tom@email.com,bill@xamarin.com] 是联系人列表,如果我使用“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”时无法获得“bill@xamarin.com”的原因。您需要将其更改为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com