我正在使用MvxAutoCompleTextView,并且已经确认ItemsSource和SelectedObject已正确绑定并且可以正常工作(我添加了一些代码,当小部件获得焦点时,它将执行ShowDropDown并确保有足够的预期项目)。
当我开始键入以过滤列表时,问题就开始了。第一步,ItemsSource得到正确过滤。但是我注意到,有时它仅根据某些键入的字符进行过滤。有时是第一个字符,有时是第一个2。基本上是一个命中注定的东西。以下是示例堆栈跟踪...01-09 13:33:37.145 D/AbsListView( 3098): onDetachedFromWindow[0:]01-09 13:33:37.185 D/AbsListView( 3098): Get MotionRecognitionManagermvx:Diagnostic:116.54 Wait starting for ac01-09 13:33:37.395 I/mono-stdout( 3098): mvx:Diagnostic:116.54 Wait starting for ac[0:] mvx:Diagnostic:116.54 Wait starting for ac[0:]mvx:Diagnostic:116.82 Wait finished with 772 items for ac[0:] mvx:Diagnostic:116.82 Wait finished with 772 items for ac01-09 13:33:37.745 I/mono-stdout( 3098): mvx:Diagnostic:116.82 Wait finished with 772 items for ac[0:]mvx:Diagnostic:117.03 Wait starting for ac[0:] mvx:Diagnostic:117.03 Wait starting for ac01-09 13:33:37.805 I/mono-stdout( 3098): mvx:Diagnostic:117.03 Wait starting for ac01-09 13:33:38.025 D/AbsListView( 3098): onDetachedFromWindow01-09 13:33:38.095 D/AbsListView( 3098): Get MotionRecognitionManager
当我输入acc时,您可能会注意到“等待交流开始”。
我还注意到,第一次过滤时,您添加其他文本以进一步过滤列表时,永远不会调用绑定到PartialText的属性的setter。当您退格时,也会发生同样的事情。<MvxAutoCompleteTextView android:id="@+id/autoComplete" android:layout_width="0dp" android:layout_weight="2" android:layout_marginLeft="5dp" android:layout_gravity="center_vertical|left" android:completionThreshold="1" local:MvxItemTemplate="@layout/template_autocomplete" local:MvxBind="ItemsSource Hazards; PartialText SearchTerm; SelectedObject SelectedHazard" style="@style/edit_text.medium.fill" />
这是绑定到PartialText的属性:private string _searchTerm; public string SearchTerm { get { return _searchTerm; } set { _searchTerm = value; RaisePropertyChanged(() => SearchTerm); Filter(); } }
我究竟做错了什么?我错过了什么吗?
我希望我能清楚地解释。提前致谢。
干杯!
海梅
最佳答案
Android的AutoCompleteTextView是真正的PITA。您看到的可能原因是“从未调用绑定到PartialText的属性的设置器”。这是因为控件仍在等待从先前的更改更新ItemsSource。
我遇到了同样的问题,并在这里回答了PartialTextChanged stops firing on MvxAutoCompleteTextView after Item selection。基本上,对PartialText的每次更改都必须导致对ItemsSource的更改。
当您看到“ mvx:Diagnostic:等待启动YOURPARTIALTEXT”但没有匹配的“ mvx:Diagnostic:116.82等待完成...”时,您将知道它已停止工作。
WRT您的搜索有时只是一个字符,我建议在Filter中的搜索调用周围将Debug.WriteLine添加到SearchTerm和Debug.WriteLine的设置器中。您将在某个地方在错误的时间更新并响应SearchTerm的更改。
ps。您可能已经在执行此操作,但是以防万一,请不要使用VS Output Window来监视调试输出。使用Android设备日志窗口并按“ stdout”过滤
拍