Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Data Binder 的一個bug

Android Data Binder 的一個bug

編輯:關於Android編程

跟著官方教程學習數據綁定的用法,功能確實非常強大,這是 Android 向 MVVM 邁出的一大步,也是 Native 的開發方式逐漸向 Web 靠攏的一小步。

其中一個綁定方式是直接使用資源數據,例如:

android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"

官方教程截圖:

完整版的布局文件如下:



    
        
    

    

        
    

largePaddingsmallPadding 都是定義在 dimens.xml 文件中的資源數據。

20dp
5dp

在 Java 代碼中與綁定 large 變量,並賦值為 ture

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   ResourceBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_resource);
    binding.setLarge(true);
} 

理論上,這樣做應該沒什麼問題,但是 Run 工程的時候,出現錯誤,報錯信息如下:

cannot find the setter for attribute 'android:padding' on android.widget.TextView with parameter type float.

看來像是 DataBinder 把 @dimen/largePadding 解析成了 float 類型,可以試一下類型轉換:

android:padding="@{large? (int)@dimen/largePadding : (int)@dimen/smallPadding}"

編譯通過,運行結果也正確,應該是 DataBinder 出 bug 了,原來資源綁定還有這麼高級的用法,可以直接進行類型轉換 - (int)@dimen/largePadding

感覺好神奇,必須讀讀源碼,了解一下 DataBinder 的實現原理。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved