gpt4 book ai didi

android - MutableLiveData 通过从 ViewModel 转换 LiveData 来公开

转载 作者:行者123 更新时间:2023-11-29 02:19:32 25 4
gpt4 key购买 nike

我使用下面显示的代码不在主 Activity 中公开 MutableLiveData

class CalculatorViewModel : ViewModel(){
private val operation = MutableLiveData<String>()
val stringOperation :LiveData<String>
get() = operation
}

但我想出了一种通过 LiveData getter 访问 MutableLiveData 的值甚至更改它的方法,这是我的代码:

(viewModel.stringOperation as MutableLiveData).value = ""

最佳答案

MutableLiveData 应该在您需要在 View 模型之外修改 LiveData 时使用。如果您不希望它从 ViewModel 公开,则必须使用 LiveData。

如果您查看 LiveData 类,您会注意到 LiveData 是一个抽象类,这意味着您必须先扩展它才能使用它。对于像您这样的情况,您可以扩展 LiveData 类。在该子类中,您将调用 api 并使用私有(private)方法更新值。所以基本上你的 LiveData 类将负责加载和更新数据。查看此链接以获取示例:

https://developer.android.com/topic/libraries/architecture/livedata#extend_livedata

这是根据文档正确使用 LiveData 类的方法:

public class StockLiveData extends LiveData<BigDecimal> {
private StockManager stockManager;

private SimplePriceListener listener = new SimplePriceListener() {
@Override
public void onPriceChanged(BigDecimal price) {
setValue(price);
}
};

public StockLiveData(String symbol) {
stockManager = new StockManager(symbol);
}

@Override
protected void onActive() {
stockManager.requestPriceUpdates(listener);
}

@Override
protected void onInactive() {
stockManager.removeUpdates(listener);
}
}

总而言之,当您想要在 LiveData/ViewModel 之外修改数据时,请使用 MutableLiveData。对于所有其他情况,请提供您自己的 LiveData 实现。

关于android - MutableLiveData 通过从 ViewModel 转换 LiveData 来公开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57298590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com