LiveDataの別のMutableLiveデータのサブクラスがあるのか?
8060 ワード
LiveData ライブラリは、データ型にかかわらずシームレスにデータ更新としてUIを更新することができます.これは、2009年に大きな追加ですDRY Principle 同様に.また、それは開発者のためのこの偉大な選択肢を作るViewModelライブラリと完全にうまく動作します.
場合は、ViewModelライブラリを知らない場合は、それに私の古い記事をチェックアウトしてください.
LiveDataを使用するには、
LiveDataには2つの実装があります.
MutableLiveData それは変わりやすく、
LiveData それは不変です. LiveDataの別のmutableLivedataサブクラスがなぜあるか。
場合は、ViewModelライブラリを知らない場合は、それに私の古い記事をチェックアウトしてください.
Kotlinを使ってAndroidでViewModelで作業する
アユッシュグプタ・ Jan 28 ' 21・ 3分読む
#kotlin
#android
用途
依存
LiveDataを使用するには、
androidx-lifecycle
図書館.dependencies {
// LiveData
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
}
実装
LiveDataには2つの実装があります.
MutableLiveData それは変わりやすく、
LiveData それは不変です.
LiveDataの別のmutableLivedataサブクラスがなぜあるか。
10月18日
コメント: 1
回答:3
104
どうもMutableLiveData
がLiveData
だけ作ることによってsetValue()
and postValue()
メソッドpublic、LiveData
彼らは保護されている.
この変更のための別のクラスを作る理由は何ですかLiveData
それ自体?
一般的に言って、そういうことです.
Open Full Question
MutableLiveDataの使用
我々は、ライブラリの使用方法を示すために、単純なカウンタアプリを作成されます.ViewModelライブラリと他のプロジェクトと同様のパターンで使用できます.
こちらはこちらactivity_main.xml
以下のようになります.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="40sp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
ここで、カウンタ値を格納し、ボタンを押してインクリメントする変数を作成します.この変数はMutableLiveData<Int>
を返します.MutableLiveData
初期値のコンストラクタを持つクラス.
var counter: MutableLiveData<Int> = MutableLiveData(0)
LiveDataオブジェクトの値は、value property
.
今、私たちはobserve
メソッドの値を更新するたびにいくつかの特定のアクションを行う.これはクラスの所有者とObserver
我々が我々の行動を定めることができる機能.
ViewBindingを使用してGUIコンポーネントと対話します.場合は、トピックを知らない場合は、それ以上の私の記事をチェックアウトすることができます.
Kotlinを使用してAndroidでViewBindingを使用する
アユッシュグプタ・ Jan 28 ' 21・ 3分読む
#kotlin
#android
counter.observe(this, Observer {
binding.textView.text = counter.value.toString()
})
そして、実際にカウンタをインクリメントするためにボタンにロジックを実装する必要があります.
binding.button.setOnClickListener {
counter.value?.let {
counter.value = it + 1
}
}
ここではMainActivity.kt
私の場合を見る
package dev.theimpulson.livedataexample
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import dev.theimpulson.livedataexample.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val counter: MutableLiveData<Int> = MutableLiveData(0)
counter.observe(this, Observer {
binding.textView.text = counter.value.toString()
})
binding.button.setOnClickListener {
counter.value?.let {
counter.value = it + 1
}
}
}
}
これで我々のアプリが完了です.ボタンをクリックするとすぐにUIがインクリメントされます.
LiveDataの使用
私が以前に述べたように、LiveDataは不変です.したがって、値を設定することはできません.オブジェクトを観測できるようにするのであれば、プライベートなセッターを使用したい場合は特に便利です.
現在のケースでは、どうすればよいかを示します.
private val _counter: MutableLiveData<Int> = MutableLiveData(0)
fun counter(): LiveData<Int> {
return _counter
}
counter().observe(this, Observer {
binding.textView.text = counter().value.toString()
})
binding.button.setOnClickListener {
_counter.value?.let {
_counter.value = it + 1
}
}
私が作ったことに気づく_counter
どの種類のMutableLiveData
プライベートクラスで、クラスに制限されます.人がその値を観察したい場合、彼らはcounter()
型の関数LiveData
誰のセッターが個人的であるか.これはクラスの外側のカウンタの値を変更できないことを保証します.私はあなたがLiveDataを使用できる方法をクリア願っています.
これらは非常に短い例でしたが、このライブラリが開発者のためにどれだけ強力で役に立ちますか.私は両方のライブラリを最大限に活用するためにViewModelと一緒にLiveDataを使用することをお勧めします.
Reference
この問題について(LiveDataの別のMutableLiveデータのサブクラスがあるのか?), 我々は、より多くの情報をここで見つけました
https://dev.to/theimpulson/working-with-livedata-on-android-in-kotlin-1npc
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="40sp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
var counter: MutableLiveData<Int> = MutableLiveData(0)
Kotlinを使用してAndroidでViewBindingを使用する
アユッシュグプタ・ Jan 28 ' 21・ 3分読む
#kotlin
#android
counter.observe(this, Observer {
binding.textView.text = counter.value.toString()
})
binding.button.setOnClickListener {
counter.value?.let {
counter.value = it + 1
}
}
package dev.theimpulson.livedataexample
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import dev.theimpulson.livedataexample.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val counter: MutableLiveData<Int> = MutableLiveData(0)
counter.observe(this, Observer {
binding.textView.text = counter.value.toString()
})
binding.button.setOnClickListener {
counter.value?.let {
counter.value = it + 1
}
}
}
}
private val _counter: MutableLiveData<Int> = MutableLiveData(0)
fun counter(): LiveData<Int> {
return _counter
}
counter().observe(this, Observer {
binding.textView.text = counter().value.toString()
})
binding.button.setOnClickListener {
_counter.value?.let {
_counter.value = it + 1
}
}
Reference
この問題について(LiveDataの別のMutableLiveデータのサブクラスがあるのか?), 我々は、より多くの情報をここで見つけました https://dev.to/theimpulson/working-with-livedata-on-android-in-kotlin-1npcテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol