超簡単にLiveDataを説明すると、
「データが変わるとビューが変わる」
ってことが簡単に実装できる方法です。
Android 本家DeveloperサイトのLiveData公式説明は下記をどうぞ。
https://developer.android.com/topic/libraries/architecture/livedata?hl=ja#work_livedata
リスナーやオブザーバーを自分で作ったりしなくてもいいので簡単ですし、メモリーリークが発生しない、アクティビティのライフサイクルのことを気にしなくてよいので使い勝手がよいです。
ViewModelというのを使わないといけないので(多分、使わなくてもいいんだろうけど使うことを推奨)ViewModelについても知っていた方がいいですが、これも超簡単に説明すると、
「ビューのデータ部分」
ということです。
gradleなどへの記述は、上記公式サイトを見てください。
ではいっきまーす。
//LiveDataActivity.kt内の記述
import android.arch.lifecycle.Observer //Android.utilのやつではないので注意
import android.arch.lifecycle.ViewModelProviders
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Button
import android.widget.TextView
import jp.onlineconsultant.taskadmin.ui.main.TaskViewModel
class LiveDataActivity : AppCompatActivity() {
private lateinit var model: TaskViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_live_data)
val hello: TextView = findViewById(R.id.hello)
val button = findViewById<View>(R.id.button) as Button
button.setOnClickListener {
model.currentTask.setValue("ほげぇぇ")
}
// Get the ViewModel.
model = ViewModelProviders.of(this).get(
TaskViewModel::
class.java
)
// Create the observer which updates the UI.
val nameObserver = Observer<String> { newName ->
// Update the UI, in this case, a TextView.
hello.text = newName
}
// Observe the LiveData, passing in this activity as the LifecycleOwner and the observer.
model.currentTask.observe(this, nameObserver)
model.currentTask.value = "ほげほげ"
}
}
<!-- activity_live_data.xmlの記述-->
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LiveDataActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/task_input_voice" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
//TaskViewmodel.kt内に記載
class TaskViewModel : ViewModel() {
// Create a LiveData with a String
val currentTask: MutableLiveData<String> by lazy {
MutableLiveData<String>()
}
}
ボタンをクリックすると、
「ほげほげ」
が
「ほげぇぇ」
に変わります。