我想android數據綁定,我真的很驚訝它的功能。它確實將視圖的所有getter和setter轉移到一個位置(佈局文件或自定義綁定適配器)。綁定適配器中的命名空間?
但是,我不明白的是這裏使用的命名空間?我正在讀喬治最近的一篇文章對中here,他提到:
任何應用程序命名空間並不需要在參數的任何命名空間,但在Android名稱空間的屬性,你必須給完整的屬性名稱包括「android」。
所以,如果我不給名稱空間,它的作品。我的自定義屬性名稱間隔爲xmlns:app="http://schemas.android.com/apk/res-auto"
。我真的不知道這意味着什麼。
說我有一個文本視圖,我很喜歡這個(只是舉例硬編碼字符串)這樣做:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text='@{"Created By:" + user.name + " on " + user.time}' />
這是真的好,我可以在這裏提供的參數:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:createdBy="@{user.name}"
app:createdAt="@{user.time}" />
而且通過將該文本設置爲與上述示例相同來處理Java中的代碼。這爲佈局文件提供了易於使用和易於理解的代碼。
但是,這種爭論有時會發生衝突。如果我在2個不同格式的地方使用這兩種不同的格式,如Created by User A on 7/10/2016
和From User A (7/10/2016)
。這兩者都可能需要與我在第二個示例中展示的相同的參數。我怎樣才能區分它們?
我還可以提供第三個參數一樣app:format
並讓自己的自定義綁定功能,可以理解,但能在這裏命名空間中的重要作用?我可以爲多個數據綁定元素提供自定義名稱空間,並在綁定適配器中相應地處理它們嗎?或者喬治在他的文章中提到的命名空間會被忽略?
在官方文檔他們已經使用bind:
命名空間和結合銜接方法,他們也提供了命名空間。我對命名空間在數據綁定中的角色有點困惑。
嗨,喬治!它真的很高興收到你的來信。我已經這樣做了,但那個''時間'東西很長,所以轉換它需要一個'BindingAdapter'。通過提供自定義屬性,它確實擴展了佈局文件的功能。我想知道什麼是放置BindingAdapter方法的最佳位置?在一個幫手類裏面?如果您有多個輔助類或活動類,其佈局文件將顯示在屏幕上?期待您的下一篇關於Medium的數據綁定的文章。 – kirtan403
你也可以在你的表達式中使用方法,雖然它可能會讓你的表達有點難以實現:'@ {@ string/createdBy(user.name,TimeUtil.toDate(user.time))}''。如果你有自定義視圖的BindingAdapter,我會把它們放在它們自己的類中。然而,這是不同的。有很多方法可以組合,我不能說一個是對的,一個是錯的。如果相同屬性的屬於同一個類,找到正確的BindingAdapter可能會更容易。 –
謝謝你的建議。把常用的多個地方放在一個輔助方法中進行數據綁定,特別是在單個活動中可以放入活動類中。我會去的! – kirtan403