2015-01-09 20 views
1

我正在使用MvxAutoCompleTextView,並且我已經確認了ItemsSource和SelectedObject被正確綁定並正常工作(我添加了一些代碼,當小部件獲得焦點時,它會執行ShowDropDown並確保足夠物品在那裏)。MvxAutoCompleTextView失去對PatialText的綁定

當我開始鍵入來篩選列表時,問題就開始了。首先,ItemsSource會被正確過濾。但我注意到有時它僅基於一些輸入字符進行過濾。有時它是第一個字符,有時它是第一個字符。基本上是一個命中和錯過的東西。下面是一個示例堆棧跟蹤...

01-09 13:33:37.145 D/AbsListView(3098): onDetachedFromWindow [0:] 01-09 13:33:37.185 D/AbsListView(3098): Get MotionRecognitionManager mvx:Diagnostic:116.54 Wait starting for ac 01-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 ac 01-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 ac 01-09 13:33:37.805 I/mono-stdout(3098): mvx:Diagnostic:117.03 Wait starting for ac 01-09 13:33:38.025 D/AbsListView(3098): onDetachedFromWindow 01-09 13:33:38.095 D/AbsListView(3098): Get MotionRecognitionManager

你可能注意到在「等待開始爲AC」當我輸入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(); } }

我在做什麼錯?我錯過了什麼嗎?

我希望我解釋清楚。提前致謝。

乾杯!

Jaime

回答

4

Android的AutoCompleteTextView是一個真正的PITA。您看到「綁定到PartialText的屬性的設置者永遠不會被調用」的可能原因。是因爲控件仍在等待從之前的更改中更新ItemsSource。

我有同樣的問題,並在這裏回答它,PartialTextChanged stops firing on MvxAutoCompleteTextView after Item selection。基本上,對PartialText 必須的每次更改都會導致對ItemsSource的更改。

你就會知道它已停止工作,當你看到「MVX:診斷:等待起始YOURPARTIALTEXT」,但不匹配「MVX:診斷:116.82等待結束......」你的搜索有時是

WRT一個字符我建議將Debug.WriteLine添加到SearchTerm的設置程序和Debug.WriteLine中,以便在Filter中進行搜索調用。某處您將更新並在錯誤的時間對SearchTerm進行更改。

p.s.你可能已經這樣做了,但爲防萬一,不要使用VS輸出窗口來觀察調試輸出。使用Android設備日誌窗口並按「標準輸出」進行過濾

帕特

+0

非常感謝帕特!這是你的相關答案,我指出了正確的方向。文字發生變化後,我必須在適配器上調用NotifyDataSetChanged。 – Jaime 2015-01-12 17:26:50

+0

很高興你把它修好了。 NotifyDataSetChanged應該在更新ItemsSource時被調用 – 2015-01-12 17:29:04

1

難道是因爲鏈接器而沒有設置綁定嗎?在這種情況下,你可以把它添加到您的LinkerPleaseInclude.cs文件是這樣的:

public void Include(MvxAutoCompleteTextView text) 
     { 
      text.TextChanged += (sender, args) => text.Text = "" + text.Text; 
      text.PartialTextChanged += (sender, args) => text.Text = "" + text.Text; 
      text.SelectedObjectChanged += (sender, args) => text.Text = "" + text.Text; 
     } 
相關問題