具有初始值的MutableLiveData

时间:2018-07-12 12:00:05

标签: android kotlin android-livedata

如何使用初始值初始化 MutableLiveData ? 我正在寻找类似的东西:

val text = MutableLiveData<String>("initial value")

8 个答案:

答案 0 :(得分:26)

您可以创建方便的Extension Function来为您进行初始化。

fun <T : Any?> MutableLiveData<T>.default(initialValue: T) = apply { setValue(initialValue) }

val liveData = MutableLiveData<String>().default("Initial value!")

答案 1 :(得分:24)

MutableLiveData已更新,现在有一个接受初始值的构造函数:)

据我所见,此版本开始提供了构造函数:

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01'

可惜他们没有更新MediatorLiveData来反映这一点。

答案 2 :(得分:11)

最后,我意识到我可以使用

val text = MutableLiveData<String>().apply { postValue("initial value")}

({postValue在从后台线程使用时是必需的,否则,从主线程使用时,您可以安全地使用value = "initial value"

答案 3 :(得分:1)

您可以这样创建扩展构造函数(糖技巧):

fun <T : Any?> MutableLiveData(defaultValue: T) = MutableLiveData<T>().apply { setValue(defaultValue) }

使用:

var defaultValue: MutableLiveData<String> = MutableLiveData("Default value")

答案 4 :(得分:1)

如果您希望在您的MutableLiveData<T>中传递一些默认值,那么我有一个更好的解决方案。如果您使用的是Kotlin,则有一个classObservableProperty<T>,可以帮助您传递默认为您的MutableLiveData。这是我的实现。

val nameLiveData = MutableLiveData<String>()
var name: String by Delegates.observable("") { _, _, newValue ->
    nameLiveData.postValue(newValue)
}

在您的ActivityFragment中观察此属性。

viewModel.nameLiveData.observe(this, Observer {
        //Your logic goes here
    })

您只需更改值name = "Joe",它就会发布到您的LiveData中。

答案 5 :(得分:0)

您不能那样做。如果需要,可以将值设置如下。

    val text = MutableLiveData<String>()
    text.value = "initial"

答案 6 :(得分:0)

也是这样。

    val data = MutableLiveData<String>()
    data.value = "data"
    val text = MutableLiveData<String>().apply {
        "apply"
    }
    Log.d("Data",text.value)

答案 7 :(得分:0)

尽管这是一个Kotlin问题,但如果我也为此添加Java版本,那可能会有所帮助。

使用+ (void)saveEntity:(CloudKitEntity *)entity completion:(void (^)(NSError * _Nonnull))completion { [[self privateDatabase] saveRecord:entity.record completionHandler:^(CKRecord * _Nullable record, NSError * _Nullable error) { if (completion) { completion(error); } }]; } 依赖项时:

     <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <archive>
              <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>com.game.Main</mainClass>
              </manifest>
            </archive>
        </configuration>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

使用以下构造函数初始化androidx

implementation "androidx.lifecycle:lifecycle-viewmodel:2.1.0"

使用MutableLiveData依赖项时:

new MutableLiveData<>("Initial value");

初始化如下。

android

implementation 'android.arch.lifecycle:viewmodel:1.1.1' 依赖项的确具有构造函数,该构造函数采用用于初始化MutableLiveData<String> text = MutableLiveData<String>(); text.setValue("Initial value"); 的值。但是,如果您使用的是androidx依赖项,则没有使用构造函数进行初始化的选择