我已經實現了新的Android數據綁定,並且在實現後意識到它不支持雙向綁定。我試圖手動解決這個問題,但我很努力地找到一個很好的解決方案,當綁定到EditText時使用。 在我的佈局,我有這樣的看法:創建與Android數據綁定的雙向綁定
<EditText
android:id="@+id/firstname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords|textNoSuggestions"
android:text="@{statement.firstName}"/>
另一種觀點也呈現出了結果:
<TextView
style="@style/Text.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{statement.firstName}"/>
在我的片段,我創建了這樣的結合:
FragmentStatementPersonaliaBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_statement_personalia, container, false);
binding.setStatement(mCurrentStatement);
該作品並在EditText中放入firstName的當前值。問題在於文本更改時如何更新模型。我試着在EditText上放置一個OnTextChanged監聽器並更新模型。這創建了一個循環來殺死我的應用程序(模型更新更新GUI,它調用了textChanged時間無窮大)。接下來,我想只有當通知真正的變化發生這樣的:
@Bindable
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
boolean changed = !TextUtils.equals(this.firstName, firstName);
this.firstName = firstName;
if(changed) {
notifyPropertyChanged(BR.firstName);
}
}
這個工作好,但每次我寫信,圖形用戶界面的更新和對索姆原因編輯光標移動到前面。
任何建議將受到歡迎
你的吸氣劑在哪裏?你給它添加了@ @ Bindable'註解嗎? –
是的。現在將吸氣劑添加到描述中。 – Gober
儘管上面有布爾值,你總是調用'this.firstName = firstName'。你看過那個邏輯嗎? –