Android Studio3.5裏使用DataBinding,飛起來!

原本不打算寫這篇的,可是有點激動,就記錄下吧。在studio3.5以前的版本里。使用DataBinding的時候,常常會出現一些莫名其妙的bug。在xml沒有代碼提示也就忍了。可是有時候連在代碼裏代碼都不提示。忍不了。在看了3.5的優化中,有一點說,只要在xml裏寫上綁定數據,都不用build,IDE會自動取生成,而後代碼提示的問題也不見了,果斷從3.2.0升級到了3.5。
惟一要注意的問題是studio3.5格式化佈局,佈局錯亂解決方案php



這裏我說下2點經典優勢。文章末尾會放出連接。即便不學習不使用MVVM框架。我也以爲對android開發之路有很大的幫助。java

1、或許你之後會遠離butterKnife 之初識DataBinding

不須要引入任何依賴,只要在你項目build.gradle的android標籤上,加上:android

dataBinding {
        enabled = true
    }
複製代碼

而後佈局最外層用layout包裹。像這樣。框架

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    
    <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">

        <TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" />
        
    </RelativeLayout>

</layout>
複製代碼

而後在Activity裏只要進行數據綁定下。就可使用了ide

public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sencond);
        ActivitySencondBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_sencond);
        binding.txt.setText("Hello Girl!!");
    }
}
複製代碼
  • ActivitySencondBinding 是DataBinding幫你生成的。是按照你的xml文件名+Binding生成。我這裏xml:R.layout.activity_sencond
  • DataBindingUtil:也是系統類(想一想,在列表裏ViewHolder裏使用太爽)
  • 經過binding.txt就得到到控件了。今後拒絕findViewById。或許也會讓你遠離butterKnife
  • 雖然要寫一下綁定的代碼。可是你能夠把它封裝在Base裏。統一用ViewDataBinding。這是他們的父類。可是在使用的時候記得強轉成你當前的Binding

2、進行數據綁定

對於上面的的代碼。咱們能夠繼續優化。(這裏看起來雖然有點脫褲子放屁,可是用到MVVM裏確是能夠實現數據和xml的雙向綁定) 咱們把Activity的佈局改爲這樣佈局

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="textStr" type="String" />
        
    </data>
    <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">

        <TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{textStr}" />

    </RelativeLayout>

</layout>
複製代碼
  • 加上 data 標籤,variable 標籤表明要綁定的一個值。name:至關於引用。type:是導入的包。在studio3.5後,有了代碼提示
  • 設置數據用@{textStr}。textStr是上面的引用。

那麼此時的Activity裏的代碼是:學習

public class SecondActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sencond);
        ActivitySencondBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_sencond);
        binding.setTextStr("Hello Girl!!");
    }
}
複製代碼

這裏就算是數據綁定了。若是是要設置點擊事件直接在加個綁定值data標籤上加上:gradle

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        ...//省略代碼便於理解
        <variable name="onClickListener" type="android.view.View.OnClickListener" />
        
    </data>
    <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent">

        <TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{textStr}" android:onClick="@{onClickListener}" />

    </RelativeLayout>

</layout>
複製代碼

Activity裏固然是要把這個onClickListener設置進去了,Activity實現View.OnClickListener接口以下:優化

public class SecondActivity extends AppCompatActivity implements View.OnClickListener{
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sencond);
        ActivitySencondBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_sencond);
        binding.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this, "就是這樣", Toast.LENGTH_SHORT).show();
    }
}
複製代碼

結束語

網上已經有不少講的很詳細了這裏放2個連接:ui

入門到進階

DataBinding系列

但願對想要了解這塊的兄弟有所幫助。!我的以爲。寫一行綁定代碼,能夠幫你的Activity的頁面節約多少代碼啊!即便你用butterKnife,那也是不少不少。

相關文章
相關標籤/搜索