安卓数据绑定 DataBinding 结合ViewModel
介绍通过数据绑定安卓可以实现类似于Vue的Mvvm(Model-View-ViewModel)功能,可以极大减少代码和逻辑负担。官网描述使用配置在build.gradle中写入以下代码来启用数据绑定android {...dataBinding {enabled = true}}xml配置打开 activity_main.xml 鼠标移入左上角 转换为data binding layout视图转换
·
介绍
通过数据绑定安卓可以实现类似于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)}" />
更多推荐





所有评论(0)