我已经尝试了一段时间来创建一个AutoCompleteTextView,您可以在其中搜索名称,当您从列表中选择一个名称时,控制器应该存储在某个位置(在我的测试中,只需{{{ 1}}结果)。
这是我的代码:
Toast.MakeTest().Show()
这是我将xml元素绑定到控制器的部分,然后我创建了适配器(Persona是一个具有属性int id和String name的Object,暴露了ToString()方法)。
它工作正常,我可以开始写一封信,它会显示建议的名字。
现在我想将属性id绑定到用户选择的名称。 可能吗? 我知道的唯一选择是使用微调器,但我想展示成千上万的名字,所以如果可以的话我会避开旋转器。
如果您看到任何其他解决方案,我会非常感谢,因为我对Xamarin来说很新。
非常感谢。
EDIT。我添加了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;
当我选择一个选项时会触发,问题是autoCompleteSearchName.ItemClick += autoTextViewItemClick;
是相对于显示顺序的,并且不以任何方式绑定到我的真实对象的属性。
我错过了什么吗?
答案 0 :(得分:0)
您必须创建自定义适配器并使用e.Id
代替e.Position
。不要忘记在适配器中实现Filter
。
注意:您将无法继承ArrayAdapter
,因为您无法访问项目列表或覆盖GetItemId
。