public MutableLiveData getLiveData() {
if (mLiveData == null) {
mLiveData = new MutableLiveData<>();
}
return mLiveData;
}
public void onNormalSetUse() {
getLiveData().setValue(“hahahhahaha===>set”);
}
public void onNormalPostUse() {
new Thread(new Runnable() {
@Override
public void run() {
getLiveData().postValue(“hahahhahaha==>post”);
}
}).start();
}
}
- 在Activity中进行监听
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import cn.tsou.google2019io.R;
import cn.tsou.google2019io.livedata.viewmodel.LiveDataViewModel;
public class LiveDataActivity extends AppCompatActivity {
private LiveDataViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_live_data);
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
viewModel = ViewModelProviders.of(this).get(LiveDataViewModel.class);
MutableLiveData liveData = viewModel.getLiveData();
liveData.observe(this, new Observer() {
@Override
public void onChanged(@Nullable String s) {
Log.d(“huangxiaoguo”, s);
}
});
}
public void onNormalSetUse(View view) {
viewModel.onNormalSetUse();
}
public void onNormalPostUse(View view) {
viewModel.onNormalPostUse();
}
}
记住是ViewModelProviders不是ViewModelProvider。
- setValue与postValue的区别
setValue:
@MainThread
protected void setValue(T value) {
assertMainThread(“setValue”);
mVersion++;
mData = value;
dispatchingValue(null);
}
postValue:
protected void postValue(T value) {
boolean postTask;
synchronized (mDataLock) {
postTask = mPendingData == NOT_SET;
mPendingData = value;
}
if (!postT