Observer에게 데이터 변경에 대한 알림을 보내는 클래스. 일반 클래스들과 다르게 LiveData는 애플리케이션의 life cycle을 인식한다.
// Test code to practice live data ArrayList<Integer> testList = new ArrayList<>(); // LiveData안에 들어갈 리스트 testList.add(1); // 데이터의 변경이 가능한 MutableLiveData. LiveData는 abstract class이기 때문에 instantiate이 불가능 MutableLiveData<List<Integer>> testLiveData = new MutableLiveData<>(); testLiveData.setValue(testList); // observer가 알림을 받음 testLiveData.observe(this, new Observer<List<Integer>>() { @Override public void onChanged(List<Integer> integers) { System.out.println("from mutable live data observer: " + integers); } }); tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { testLiveData.getValue().set(0, testLiveData.getValue().get(0) + 1); testLiveData.setValue(testLiveData.getValue()); // observer에게 알림을 주기 위해 필요함 System.out.println("from tab: " + testLiveData.getValue()); } });
LiveData Activity A Observer Update setValue(a) active a setValue(b) active b setValue(c) paused - setValue(d) paused - - resumed d
데이터바인딩과 LiveData를 함께 사용하면 Observer에서 직접 UI를 변경해줄 필요없이 xml 파일에서 데이터바인딩만 해주면되기 때문에 코드가 훨씬 더 깔끔해진다.
<layout>
<data>
<variable name="user" type="User" />
</data>
.........
<TextView
...
android:text="@{user.title}">
</TextView>
</layout>