如果您想要可移植的代码,那么您当然不希望在 ViewModel 附近有 Java.anything。
恐怕我无法真正遵循 CustomerAdapter 示例代码 - 您的过滤器和发布方法看起来不太正确。此外,在我发现的大多数 Java 示例之后,我遇到了一些问题——据我所见,我认为 AutoCompleteTextView 上的线程模型并不理想——它阻塞线程太久(恕我直言)。
但是,在对 Google Books API 示例进行了一些黑客攻击之后,我创建了一个示例 - 请参阅以下视频:
此示例使用MvvmCross 框架内的新alpha数据绑定 Autocomplete 类和适配器工作。可能这些类实际上从未成为全职框架成员 - 在这种情况下,它们可以改为存在于某些外部库中。
基本功能在 3 个新属性上使用数据绑定:
- PartialText - 这是一个部分文本字符串 - 从 View 发送到 ViewModel
- ItemsSource - 这是可用于提供的 PartialText 的当前项目集 - 从 ViewModel 发送到 View
- SelectedObject - 这是当前选定的项目 - 从 View 发送到 ViewModel
您可以在绑定 xml 中看到这些设置:
<Mvx.MvxBindableAutoCompleteTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxItemTemplate="@layout/listitem_book"
local:MvxBind="{'Text':{'Path':'EnteredText','Mode':'TwoWay'},
'ItemsSource':{'Path':'AutoCompleteSuggestions'},
'PartialText':{'Path':'CurrentTextHint'},
'SelectedObject':{'Path':'CurrentBook'}}"
/>
请注意,由于 Android 线程模型,PartialText 中的每个更改都必须通过 ItemsSource 中的最终信号更改来满足 - 这应该是对象集合中的单个更改,而不是许多小的更改。
此初始示例的代码位于:https ://github.com/slodge/MvvmCross/tree/master/Sample%20-%20SimpleDialogBinding/SimpleBinding/DroidAutoComplete
请注意,此示例使用“简单绑定”而不是完整的 Mvx 框架,因此在 ViewModel 中需要考虑更多线程。
绑定视图及其适配器不是简单的代码——绑定代码本质上是相当抽象的——但它们可以在以下位置找到:
如果您正在做任何与网络相关的事情,那么从长远来看,我相信实施新的自动完成视图可能比今天使用内置的 Android 更好!