Android Kotlin LiveData 超簡単なサンプルコード

超簡単に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>()
        }

    }

ボタンをクリックすると、

「ほげほげ」


「ほげぇぇ」

に変わります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です