原本不打算寫這篇的,可是有點激動,就記錄下吧。在studio3.5以前的版本里。使用DataBinding的時候,常常會出現一些莫名其妙的bug。在xml沒有代碼提示也就忍了。可是有時候連在代碼裏代碼都不提示。忍不了。在看了3.5的優化中,有一點說,只要在xml裏寫上綁定數據,都不用build,IDE會自動取生成,而後代碼提示的問題也不見了,果斷從3.2.0升級到了3.5。
惟一要注意的問題是studio3.5格式化佈局,佈局錯亂解決方案php
這裏我說下2點經典優勢。文章末尾會放出連接。即便不學習不使用MVVM框架。我也以爲對android開發之路有很大的幫助。java
不須要引入任何依賴,只要在你項目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!!");
}
}
複製代碼
對於上面的的代碼。咱們能夠繼續優化。(這裏看起來雖然有點脫褲子放屁,可是用到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>
複製代碼
那麼此時的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
但願對想要了解這塊的兄弟有所幫助。!我的以爲。寫一行綁定代碼,能夠幫你的Activity的頁面節約多少代碼啊!即便你用butterKnife,那也是不少不少。