Jetpack之LiveData扩展MediatorLiveData
Posted Jason_Lee155
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jetpack之LiveData扩展MediatorLiveData相关的知识,希望对你有一定的参考价值。
LiveData的使用前面已经说过:
Android Jetpack组件之 LiveData使用-源码
但是android库里也有一些扩展类,比如 MediatorLiveData 需要介绍下。
假设有一个需求:在ExitText中输入文字的同时,显示文字个数。当然可以用EditTextChangeListener,也可以只用一个LiveData监听输入String也可以得到length,但是这里只是举例嘛。
class MainViewModel : ViewModel()
val message: MutableLiveData<String> = MutableLiveData()
val count: MediatorLiveData<Int> = MediatorLiveData()
init
count.value = 0
count.addSource(message)
val cnt = message.value?.length ?: 0
count.postValue(cnt)
fun postMessage(message: String)
this.message.postValue(message)
MediatorLiveDarta的作用,顾名思义可以作为中间人的角色监听其他LiveData。这里可以在EditText的回调里通过postMessage更新message,count通过addSource监听message的变化后更新输入长度。
用Java版本看看:
例如:从getNameFromServer()取的值是"alan",而MediatorLiveData做了转化后成了"alan gong"。
public class MyViewModel extends ViewModel
private MutableLiveData<String> liveEvent;
private MediatorLiveData<String> testLiveData;
public MyViewModel()
testLiveData = new MediatorLiveData<>();
testLiveData.addSource(liveEvent, new Observer<String>()
@Override
public void onChanged(String s)
testLiveData.postValue(s + " gong");
);
getNameFromServer();
public MediatorLiveData<String> getTestLiveData()
return testLiveData;
private void getNameFromServer()
if (liveEvent == null)
liveEvent = new MutableLiveData<>();
liveEvent.setValue("alan");
public class MainActivity extends AppCompatActivity
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(LayoutInflater.from(this));
setContentView(binding.getRoot());
ViewModelProvider provider = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory());
MyViewModel myViewModel = provider.get(MyViewModel.class);
binding.setViewModel(myViewModel);
myViewModel.getTestLiveData().observe(this, new Observer<String>()
@Override
public void onChanged(String s)
textView.setText(s);
);
至于原理,相信会使用LiveData的都觉得没什么,studio里点这个类进入源码看看就行了。
以上是关于Jetpack之LiveData扩展MediatorLiveData的主要内容,如果未能解决你的问题,请参考以下文章