正文
class
MainActivity
extends
AppCompatActivity
{
private
static
final
String TAG=
"MainActivity"
;
@Override
protected
void
onCreate
(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MutableLiveData<String> mutableLiveData =
new
MutableLiveData<>();
mutableLiveData.observe(
this
,
new
Observer<String>() {
@Override
public
void
onChanged
(@Nullable
final
String s)
{
Log.d(TAG,
"onChanged:"
+s);
}
});
mutableLiveData.postValue(
"Android进阶三部曲"
);
}
}
复制代码
注释1处的observe方法有两个参数分别是LifecycleOwner和
Observer<T>
,第一个参数就是MainActivity本身,第二个参数新建了一个
Observer<String>
,在onChanged方法中得到回调。注释处的postValue方法会在主线程中更新数据,这样就会得到打印的结果。
D/MainActivity: onChanged:Android进阶三部曲
在大多数情况下,LiveData的observe方法会放在onCreate方法中,如果放在onResume方法中,会出现多次调用的问题。除了MutableLiveData的postValue方法,还可以使用setValue方法,它们之前的区别是,setValue方法必须在主线程使用,如果是在工作线程中更新LiveData,则可以使用postValue方法。
2.更改LiveData中的数据
如果我们想要在LiveData对象分发给观察者之前对其中存储的值进行更改,可以使用Transformations.map()和Transformations.switchMap(),下面通过简单的例子来讲解它们。
2.1 Transformations.map()
如果想要在LiveData对象分发给观察者之前对其中存储的值进行更改,可以使用Transformations.map()。
public class MainActivity extends AppCompatActivity {
private static final String TAG="MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MutableLiveData<String> mutableLiveData = new MutableLiveData<>();
mutableLiveData.observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable final String s) {
Log.d(TAG, "onChanged1:"