我是Android的新手。我正在开发一个应用程序,可以一个接一个地显示10个单词及其含义。我的问题是如何将包含LiveData>变量的模型视图中的数据逐个显示到文本视图中。这个过程应该是这样的:从数据库中检索数据到存储库,再到视图模型,最后在UI文本视图中显示。除了使用循环视图之外,还有什么建议吗? ? 。 @Entity(tableName = "word_table")
data class Word(
@ColumnInfo(name = "English")
val English: String,
我有一个ViewModel,如下所示,它同时具有LiveData和Compose状态
@Suppress("UNCHECKED_CAST")
class SafeMutableLiveData<T: Any>(value: T) : LiveData<T>(value) {
override fun getValue(): T = super.getValue() as T
public override fun setValue(value: T) = super.setValue(value)
public override
鉴于这种情况:
模型
data class User(var id: int, var name: String)
视图模型
val Users: LiveData<List<User>>
val SelectedUser: LiveData<User>
fun changeSelectedUserName(){SelectedUser.Name = "foo"}
用户界面
<android:TextView Text="@{viewmodel.SelectedUser.name}"/>
<android:
使用Android更新视图的“正确”方式似乎是LiveData。但我不能确定将其与模型联系起来的“适当”方式。我见过的大多数文档都显示了连接到Room,它返回一个LiveData对象。但是(假设我没有使用房间),在我的模型中返回一个LiveData对象(它是“生命周期感知的”,所以特定于安卓的活动/视图框架)对我来说似乎违反了关注点分离?
下面是一个包含Activity的示例。
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
su
我正在尝试为视图模型编写一个测试。因为我需要context,所以我正在做一个仪表化测试。
视图模型和测试如下所示:
class MyViewModel(
private val dispatcher: CoroutineDispatchers = Dispatchers.IO) : ViewModel() {
private val _livedata = MutableLiveData<Boolean>()
val livedata: LiveData<Boolean> = _livedata
fun doSometh
我正在从我的视图模型中的数据库获取一个LiveData>。但是我必须在列表中添加一些Foo对象,然后才能将它们转发到视图。
我正在使用Room API来访问数据库。我对Dao、存储库和视图模型使用了推荐的封装。存储库只转发来自Dao的LiveData。在视图模型中,我从存储库中调用该方法并将结果存储在一个变量中。因为我不能使用LiveData-object的observe方法,所以我尝试使用Transformations.map-method。但是map-method在任何时候都不会被调用。
public class FooViewModel extends AndroidViewMod
问题
--我希望重构安卓ViewModel (VM)中不可变视图状态的值,以便执行以下操作:
干净地更新VM中的视图状态,而不复制整个视图状态
将视图状态数据保持不变,以观察的更新。
我使用LiveData构建了一个(UDF)模式,以更新在视图中观察到的VM中的视图状态变化。
请参阅:
完整示例代码:
实现
现有的实现使用嵌套的LiveData。
将视图状态存储在VM中的一个LiveData val
作为不可变的LiveData的视图状态属性的嵌套val
// Stored as viewState LiveData val in VM
data class F
我正在实现一个天气应用程序,该应用程序可以通过DarkSky从GoogleFusedLocationClient获得天气预报,并从GoogleFusedLocationClient获取位置。我的目标是通过应用程序闭包和配置更改来保存UI数据。我使用Room+ViewModel+LiveData和Repository模型实现了它。但是我在片段中得到我的位置和预测,而不是在存储库中,目标是将它移到存储库中。
这样,存储库就可以查看数据库,如果数据库为空,则从网络中获取数据。
我现在的收藏库:
public class UIRepository {
private UIDao mUIDao
在我的android项目中,我尝试实现一个共享视图模型,它可以完成所有的读写数据。为此,我使用可变的Live,我的活动在View中调用一个update函数来更新Live。但是,我不知道如何在数据被访问之后获得数据。在数据被访问之前,我似乎正在尝试更新我的UI。我查过这个问题,看来解决办法与合作有关。我一直没有成功地实现协同机制,而且我的数据总是得到一个空值。
ViewModel:
private val firebaseDatabase: DatabaseReference = FirebaseDatabase.getInstance().reference
private v
我目前正在使用Room来存储单词的翻译列表,并以LiveData的形式返回查询以监视插入和更新。然而,当我需要为另一种源语言重新获取翻译时,我遇到了一些问题(我的当前策略是将livedata重新分配给来自房间查询的结果)。
我使用以下SQL查询获取要翻译和翻译特定语言的语言
@Dao
interface TranslationDatabaseDao {
...
//Returns all pairs of languages to translate to/from
@Query("SELECT * FROM language_pairs")
fun
错误消息
The connection pool for database '/data/data/com.app.test/databases/test-db' has been unable to grant a connection to thread 9734 (pool-3-thread-2) with flags 0x2 for 30.001001 seconds.
Connections: 1 active, 0 idle, 1 available.
Requests in progress:
executeForCursorWind