主要知识点
a、ViewModel
b、MutableLiveData
c、ActivityMainBinding
d、ConstraintLayout
ViewModel的作用:用于保存一些数据,特点:数据会一直保存在没有执行onDestory()之前
ViewModel的生命周期
LiveData:监听数据的变化
MutableLiveData
public class MyViewModelLiveData extends ViewModel {
private MutableLiveData<Integer> LikedNumber;
public MutableLiveData<Integer> getLikedNumber() {
if(LikedNumber == null){
LikedNumber = new MutableLiveData<>();
LikedNumber.setValue(0);
}
return LikedNumber;
}
public void addLikedNumber(int n){
LikedNumber.setValue(LikedNumber.getValue() + n);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.view1);
btn1 = findViewById(R.id.imageView);
btn2 = findViewById(R.id.imageView2);
myViewModelLiveData = ViewModelProviders.of(this).get(MyViewModelLiveData.class);
//在使用ViewModelProviders的时候要加入库依赖
//implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
myViewModelLiveData.getLikedNumber().observe(this, new Observer<Integer>() {
@Override
public void onChanged(@Nullable Integer integer) {
textView.setText(String.valueOf(integer));
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myViewModelLiveData.addLikedNumber(1);
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myViewModelLiveData.addLikedNumber(10);
}
});
}
Binding
数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
1、在build.gradle中添加依赖
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.score"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
dataBinding{
enabled true
}
}
dataBinding{
enabled true
}
2、在布局中配置
<data>
<variable
name="data"
type="com.example.score.MyViewModel" />
</data>
type指定为ViewModel,全路径名
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
}
}
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 = ViewModelProviders.of(this).get(MyViewModel.class);
//设置数据
binding.setData(myViewModel);
//观察数据
binding.setLifecycleOwner(this);
}
}
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content“
android:text="@{String.valueOf(data.number)}"
Button控件
android:onClick="@{()->data.bTeamAdd(1)}"