1.让布局页面承担了部分原本属于页面的工作,是页面文件和布局耦合度进一步降低。页面文件:Activity。布局:activity_main.xml
2.减少了很多 findViewById 与 OnClickListener
布局文件可以包含一些简单的业务逻辑
在 ViewModel 中的数据发生变化时通知页面
LiveData 与 ObservableField 同样可以实现双向绑定
这里的 Model 层下面的例子未呈现,等过后学到了 JetPack - Room 自然就懂了
1.它是介于 View(视图)和 Model(数据模型)直接的桥梁
2.使视图和数据能够分离,也能够保持通信
https://blog.csdn.net/qq_43290288/article/details/123478346
在 build.gradle 中添加 DataBinding 支持
android {
dataBinding {
enabled = true
}
}
自定义MyViewModel.java
import android.view.View;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
private MutableLiveData aTeamScore;
private MutableLiveData bTeamScore;
public MutableLiveData getaTeamScore() {
if(aTeamScore == null) {
aTeamScore = new MutableLiveData<>();
aTeamScore.setValue(0);
}
return aTeamScore;
}
public MutableLiveData getbTeamScore() {
if(bTeamScore == null) {
bTeamScore = new MutableLiveData<>();
bTeamScore.setValue(0);
}
return bTeamScore;
}
public void aTeamAdd(View view) {
aTeamScore.setValue(aTeamScore.getValue() + 1);
}
public void bTeamAdd() {
bTeamScore.setValue(bTeamScore.getValue() + 1);
}
}
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import android.database.DatabaseUtils;
import android.os.Bundle;
import com.example.mvvm20220312.databinding.ActivityMainBinding;
import com.example.mvvm20220312.viewmodel.MyViewModel;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); // ActivityMainBinding 对应 activity_main.xml
MyViewModel viewModel = new ViewModelProvider(this, new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(MyViewModel.class);
binding.setViewModel(viewModel); // DataBinding 与 ViewModel 绑定
binding.setLifecycleOwner(this); // 要想在绑定类中使用 LiveData 对象,我们需要指定生命周期所有者来定义 LiveData 对象的范围。在绑定类实例化后指定 activity 作为生命周期所有者
}
}
activity_main.xml
学习内容来自动脑学院~



