반응형
LiveData
설명
- Activity, Fragment의 LifeCycle에 맞춰 데이터를 관리
- observer 패턴으로 데이터 변경을 감지하고 그에 따른 처리를 할 수 있게 해준다.
코드
MainActivityclass MainActivity : AppCompatActivity() {
// private var text = MutableLiveData<String>().apply { value = "Hello World" } // 값 초기화
private var text = MutableLiveData<String>()
private var count = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
text.value = "Hello World - ${count++}"
}
text.observe(this, Observer {
// textView.text = text.value
textView.text = it
})
}
}
참고
LiveData + DataBinding
설명
- LiveData와 DataBinding을 함께 사용할 경우 LiveData 변경시 참고하는 모든 View에 변경 사항을 자동으로 반영할 수 있어 편리하다.
코드
res/layout/activity_main.xml<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="main"
type="com.example.android_example.MainActivity" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{`input : ` + editText.text}" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{`count : ` + main.count}" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{main::onClickIncreaseCount}"
android:text="increase count" />
</LinearLayout>
</layout>
MainActivity
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
var count = MutableLiveData<Int>().apply { value = 1 }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater).apply {
setContentView(root)
lifecycleOwner = this@MainActivity // LiveData 실시간 반영을 위한 설정
main = this@MainActivity // xml에 선언한 main 변수에 바인딩
}
}
fun onClickIncreaseCount(view: View) {
count.value = count.value?.plus(1)
}
}
참고
반응형
'Development > Android' 카테고리의 다른 글
[Android] Application (0) | 2021.02.09 |
---|---|
[Android] ViewModel (0) | 2021.02.09 |
[Android] DataBinding (0) | 2021.02.09 |
[Android] kotlin-android-extensions (0) | 2021.02.09 |
[Android] SoundPool (0) | 2021.02.09 |