티스토리 뷰

반응형

 

위 버튼을 누르면 수량이 올라가고, 아래 버튼을 누르면 수량이 내려가는 간단한 코드를 작성해봤다. 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 장점

https://developer.android.com/topic/libraries/architecture/livedata?hl=ko

 

 

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

 

반응형