安卓資料繫結 DataBinding 結合ViewModel
阿新 • • 發佈:2020-12-10
介紹
通過資料繫結安卓可以實現類似於Vue的Mvvm(Model-View-ViewModel)功能,可以極大減少程式碼和邏輯負擔。
官網描述
使用
在build.gradle中寫入以下程式碼來啟用資料繫結
android {
...
dataBinding {
enabled = true
}
}
開啟 activity_main.xml 滑鼠移入左上角 轉換為data binding layout檢視
轉換後是這樣的:
資料來源用ViewModel來建立
MyViewModel.java
public class MyViewModel extends ViewModel {
MutableLiveData<Integer> aTeamScore;
int aBack;
public MutableLiveData<Integer> getaTeamScore() {
if(aTeamScore == null){
aTeamScore = new MutableLiveData<>();
aTeamScore.setValue( 0);
}
return aTeamScore;
}
public void aTeamAdd(int p){
aBack = aTeamScore.getValue();
aTeamScore.setValue(aTeamScore.getValue()+p);
}
}
public class MainActivity extends AppCompatActivity {
//資料繫結的資料
MyViewModel myViewModel;
//資料繫結的檢視
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main); //不能再用原來的設定檢視了
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
myViewModel = new ViewModelProvider(this,new ViewModelProvider.NewInstanceFactory()).get(MyViewModel.class);
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
}
}
在data中設定資料
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="data"
type="com.yangliwei.demo5.MyViewModel" />
</data>
....
</layout>
佈局中的表示式使用“@{}”語法寫入特性屬性中。
//資料
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}" />
//方法
<Button android:id="@+id/gAddOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add1"
android:onClick="@{()->data.aTeamAdd(1)}" />