MediatorLiveData(AAC)

原文:https://www.jianshu.com/p/2f5bc6e9c54e

MediatorLiveData 中介者LiveData,

  • 它可以監聽另一個LiveData的數據變化,
  • 同時也可以做爲一個liveData,被其他Observer觀察。

一、基本用法

ViewModel中定義MediatorLiveData

java

public class TanViewModel extends ViewModel {
    private MutableLiveData<String> mNameEvent = new MutableLiveData<>();
    public MutableLiveData<String> getNameEvent() {
        return mNameEvent;
    }

    public MediatorLiveData myMediatorLiveData=new MediatorLiveData();

    public TanViewModel(){
        myMediatorLiveData.addSource(mNameEvent, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                String tempStr=mNameEvent.getValue();
                myMediatorLiveData.postValue(tempStr.length());
            }
        });
    }

    public void getData(int num){
        String name="tan"+num;
        Integer age=111;
        mNameEvent.postValue(name);
    }
}

kotlin

    val mediator = MediatorLiveData<List<String>>();
    val strLive = MutableLiveData<List<String>>();
     //(1)爲mediator addSource,監聽其他的liveData
     mediator.addSource(strLive, Observer {
            Log.i("ccccccccccc","onchange"+it.size);
            mediator.value = it
        })

Activity

java

//onCreate
mTestViewModel = ViewModelProviders.of(this).get(TanViewModel.class);
mTestViewModel.getNameEvent().observe(this, new Observer<String>() {
    @Override
    public void onChanged(@Nullable String s) {
        Log.w("tan","getNameEvent="+s);
    }
});
mTestViewModel.myMediatorLiveData.observe(this, new Observer() {
    @Override
    public void onChanged(@Nullable Object o) {
        Log.w("tan","myMediatorLiveData="+o);
        if(o instanceof String){
            Log.w("tan","String="+o);
        }else if(o instanceof Integer){
            Log.w("tan","Integer="+o);
        }
    }
});

//button單擊事件調用下面方法
num*=10;
mTestViewModel.getData(num);;

kotlin

class MainActivity : FragmentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //(2)監聽mediaLiveData 
        viewModel.mediator.observe(this, Observer {
            Log.i("ccccccccc","size==="+it.size)
        })
        
        
        binding.btnGotoGarden.setOnClickListener{
            viewModel.strLive.value = arrayListOf("1","22","333","4444","55555")
        };

    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章