前言
- 参考于 BiliBili longway777:https://space.bilibili.com/13…
LiveData
介绍
LiveData 也是属于架构部分的
LiveData 的作用是:在底层数据库更改的时候通知视图,使其动态更新
起步
在开始之前首先介绍一下矢量图:
矢量图是在 Android 5.0 之后出现的,它的特点就是可以任意放大不会产生锯齿,而且比较小,特别适合于做我们界面上的图标
Android 中有不少的矢量图图标,常见的用户界面的应该都有了
选择之后会出现在 drawable
目录下
新建一个项目:LiveDataDemo
我们这次要是用ImageButton
,更加的好看一点,所以选择一个矢量图
这个矢量图是一个 xml 文件,在 drawable 中
再来一个
最终布局
新建一个类:
package com.bean;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class ViewModelWithLiveData extends ViewModel {
// 类型为 MutableLiveData,泛型为 Integer
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);
}
}
LiveData
之所以可以通过数据的改变进行界面的刷新,就是通过likedNumber.setValue
来实现的
package com.bean;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
ViewModelWithLiveData viewModel;
TextView textView;
ImageButton imageButtonLeft,imageButtonRight;
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
imageButtonLeft = findViewById(R.id.imageButtonLeft);
imageButtonRight = findViewById(R.id.imageButtonRight);
ViewModelProvider.Factory factory = ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication());
ViewModelProvider viewModelProvider = new ViewModelProvider(this,factory);
viewModel = viewModelProvider.get(ViewModelWithLiveData.class);
imageButtonLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {viewModel.addLikedNumber(1);
}
});
imageButtonRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {viewModel.addLikedNumber(-1);
}
});
// 这里是非常重要的一句话,这里是用来监听 likedNumber 数据,因为可以使用 getLikedNumber 获得就可以使用这个来监听
//observe:观察
viewModel.getLikedNumber().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
// 如果发生改变,那么就将这个数据改变
textView.setText(String.valueOf(integer));
}
});
}
}