将自动完成文本视图绑定到对象数组 (ID,NAME)

本文关键字:数组 对象 ID NAME 绑定 视图 文本 | 更新日期: 2023-09-27 18:33:23

我一直在尝试创建一个自动完成文本视图,您可以在其中搜索名称,当您从列表中选择一个名称时,控制器应该存储在某个地方(在我的测试中,只需Toast.MakeTest().Show()结果就可以了(。

这是我的代码:

List<Persona> personeList = getPersone ();
        View view = inflater.Inflate(Resource.Layout.MyFragment, container, false);
        var autoCompleteSearchName = view.FindViewById<AutoCompleteTextView> (Resource.Id.autoTextName);
        ArrayAdapter<Persona> autoCompleteAdapter = new ArrayAdapter<Persona> (
            view.Context, 
            Android.Resource.Layout.SimpleDropDownItem1Line, 
            personeList
        );
        autoCompleteSearchName.Adapter = autoCompleteAdapter; 

这是我将 xml 元素绑定到控制器的部分,然后我创建适配器(Persona 是一个具有属性 int id 和 String name 的对象,公开了一个 ToString(( 方法(。

工作正常,我可以开始写一封信,它会显示建议的名字。

现在,我想将属性 ID 绑定到用户选择的名称。可能吗?我知道的唯一选择是使用微调器,但我想显示数千个名称,以便如果可以的话,我会避免使用微调器。

如果您看到任何其他解决方案,我将不胜感激,因为我对 Xamarin 很陌生。

多谢。

编辑。我添加了autoCompleteSearchName.ItemClick += autoTextViewItemClick;

当我选择一个选项时,这会触发,问题是e.Position是相对于显示顺序的,并且不以任何方式绑定到我的真实对象的属性。

我错过了什么吗?

将自动完成文本视图绑定到对象数组 (ID,NAME)

您必须创建自定义适配器并使用 e.Id 而不是 e.Position 。不要忘记在适配器中实现Filter

注意:您将无法对ArrayAdapter进行子类化,因为您无法访问项目列表或覆盖GetItemId