티스토리 뷰
위 버튼을 누르면 수량이 올라가고, 아래 버튼을 누르면 수량이 내려가는 간단한 코드를 작성해봤다. LiveData를 사용하지 않는다면 이런식으로 작성할 것이다.
private var count = 1 // button을 누르면 증가 될 숫자
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityEachBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.ivQuantityUp.setOnClickListener {
binding.tvQuantity.text = (++count).toString()
}
binding.ivQuantityDown.setOnClickListener {
binding.tvQuantity.text = (--count).toString()
}
}
LiveData 장점
LiveData 객체 관찰
대부분의 경우 앱 구성요소의 onCreate() 메서드는 LiveData 객체 관찰을 시작하기 적합한 장소이며 그 이유는 다음과 같습니다.
- 시스템이 활동이나 프래그먼트의 onResume() 메서드에서 중복 호출을 하지 않도록 하기 위해서입니다.
- 활동이나 프래그먼트에 활성 상태가 되는 즉시 표시할 수 있는 데이터가 포함되도록 하기 위함입니다. 앱 구성요소는 STARTED 상태가 되는 즉시 관찰하고 있던 LiveData 객체에서 최신 값을 수신합니다. 이는 관찰할 LiveData 객체가 설정된 경우에만 발생합니다.
일반적으로 LiveData는 데이터가 변경될 때 활성 관찰자에게만 업데이트를 전달합니다. 이 동작의 예외로, 관찰자가 비활성에서 활성 상태로 변경될 때에도 관찰자가 업데이트를 받습니다. 또한 관찰자가 비활성에서 활성 상태로 두 번째로 변경되면, 마지막으로 활성 상태가 된 이후 값이 변경된 경우에만 업데이트를 받습니다.
코드
private var count = 1 // button을 누르면 증가 될 숫자
private var itemQuantity: MutableLiveData<Int> = MutableLiveData<Int>().apply { // 초기값
value = count
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityEachBinding.inflate(layoutInflater)
setContentView(binding.root)
// 첫번째 param: LifeCycleOwner / 두번째: value 변경 감지하고 호출되는 부분
itemQuantity.observe(this, Observer {
binding.tvQuantity.text = it.toString()
})
binding.ivQuantityUp.setOnClickListener {
// liveText의 value를 변경
// liveText 자체를 변경시키면 안됨
temQuantity.value = ++count
}
binding.ivQuantityDown.setOnClickListener {
// 수량이 음수가 되지 않게
itemQuantity.value = if (count > 0) --count else 0
}
}
참고
LiveData 개요 | Android 개발자 | Android Developers
LiveData를 사용하여 수명 주기를 인식하는 방식으로 데이터를 처리합니다.
developer.android.com
[LiveData] 안드로이드 LiveData 기본 사용법 - 기본 예제
안드로이드 LiveData 기본 사용법 알아보기 - 기본 예제 오늘은 Android JetPack 중 하나인 LiveData에 대해 알아보도록 하겠습니다. LiveData는 Activity, Fragment 등의 LifeCycle을 인식하여 LifeCycle 내에..
dev-imaec.tistory.com
- Total
- Today
- Yesterday
- 데이터바인딩 뷰바인딩 차이
- 카카오 기출
- flutter simultor
- 시뮬레이터 키보드
- 안드로이드 키해시
- 전화번호목록 파이썬
- 코틀린
- 백준 1644
- 코틀린 리스트뷰
- 카카오톡으로 로그인 오류
- kotlin fragment
- 백준알고리즘
- 코틀린 데이터바인딩
- 백준 2003
- TextFormField keyboard
- 코틀린 뷰바인딩
- 카카오 키해시
- 코틀린 바텀네비게이션
- counting sort
- 안드로이드
- Kotlin
- 백준
- 투포인터 알고리즘 파이썬
- 백준 1806
- 소수 구하기 파이썬
- 안드로이드 카카오톡으로 로그인
- 프로그래머스
- 코틀린 뷰페이저
- 투포인터 알고리즘
- 파이썬 최대공약수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |