如何将一个寿命对象初始化到另一个对象?

发布于 2025-01-20 11:38:19 字数 931 浏览 3 评论 0原文

下面的类有一个方法可以加载用户列表并将其存储在 LiveData 包装器中:

class UserLoader {
    ...
    val loadedUsersLiveData: MutableLiveData<List<User>> = MutableLiveData()

    fun loadUsers() {
        ...
        val userRequest: Call<UserResponse> = userApi.loadUsers()
        userRequest.enqueue(object : Callback<UserResponse> {
            ...
            override fun onResponse(call: Call<UserResponse>, response: Response<UserResponse>) {
               ...
              loadedUsersLiveData.value = ... // assigns the list of users returned
        }
        ...
    }
}

如何将下面类中的 LiveData 变量初始化为上面类中获取的变量的值?

class UserTableViewModel : ViewModel() {

    // TODO: initialize usersLiveData to UserLoader's loadedUsersLiveData
    val usersLiveData: LiveData<List<User>> // ??

    fun loadUsers() {
        UserLoader().loadUsers()
    }
}

The following class has a method than can load a list of users and store it in a LiveData wrapper:

class UserLoader {
    ...
    val loadedUsersLiveData: MutableLiveData<List<User>> = MutableLiveData()

    fun loadUsers() {
        ...
        val userRequest: Call<UserResponse> = userApi.loadUsers()
        userRequest.enqueue(object : Callback<UserResponse> {
            ...
            override fun onResponse(call: Call<UserResponse>, response: Response<UserResponse>) {
               ...
              loadedUsersLiveData.value = ... // assigns the list of users returned
        }
        ...
    }
}

How would I initialize the LiveData variable in my class below to the value of the one that's fetched in the class above?

class UserTableViewModel : ViewModel() {

    // TODO: initialize usersLiveData to UserLoader's loadedUsersLiveData
    val usersLiveData: LiveData<List<User>> // ??

    fun loadUsers() {
        UserLoader().loadUsers()
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安穩 2025-01-27 11:38:19
class UserTableViewModel : ViewModel() {

    private val userLoader = UserLoader()

    // TODO: initialize usersLiveData to UserLoader's loadedUsersLiveData
    val usersLiveData: LiveData<List<User>> = userLoader.loadedUsersLiveData

    fun loadUsers() {
        userLoader.loadUsers()
    }
}

class UserTableViewModel : ViewModel() {

    private val userLoader = UserLoader()

    // TODO: initialize usersLiveData to UserLoader's loadedUsersLiveData
    val usersLiveData: LiveData<List<User>> = userLoader.loadedUsersLiveData

    fun loadUsers() {
        userLoader.loadUsers()
    }
}

锦欢 2025-01-27 11:38:19

不要直接暴露可变特性总是暴露于读取值的不变特性。
在旁注:您可以将类userloader() to 对象如果您想安全地调用它或没有构造函数值。

livedata是一个接口,但是您可以做的是通过mutableLivedata或其他类型的livedata初始化它,在您的情况下,这些livedata在userloader。 >
你可以做:

     class UserTableViewModel : ViewModel() {

        private val _userLiveData = MutableLiveData<List<User>>()
        val usersLiveData: LiveData<List<User>> get() = _userLiveData // observe it in the view..

        // don't forget to call this function...
        fun updateUserList() {
            _userLiveData.value = UserLoader().loadedUsersLiveData
        }
        
        fun loadUsers() {
            UserLoader().loadUsers()
        }
    }


    class UserTableViewModel : ViewModel() {
        
         //observe it in view..
        val usersLiveData: LiveData<List<User>>  = UserLoader().loadedUsersLiveData
        
    }
   
        fun loadUsers() {
            UserLoader().loadUsers()
        }

Don't directly expose mutable properties always expose immutable properties for reading the values.
on side note: you can make class UserLoader() to object if you want to safe to call it from everywhere or don't have constructor values.

LiveData is an interface but what you can do is initialize it through MutableLiveData or another LiveData of same type which in your case from UserLoader.
You can do:

     class UserTableViewModel : ViewModel() {

        private val _userLiveData = MutableLiveData<List<User>>()
        val usersLiveData: LiveData<List<User>> get() = _userLiveData // observe it in the view..

        // don't forget to call this function...
        fun updateUserList() {
            _userLiveData.value = UserLoader().loadedUsersLiveData
        }
        
        fun loadUsers() {
            UserLoader().loadUsers()
        }
    }

or


    class UserTableViewModel : ViewModel() {
        
         //observe it in view..
        val usersLiveData: LiveData<List<User>>  = UserLoader().loadedUsersLiveData
        
    }
   
        fun loadUsers() {
            UserLoader().loadUsers()
        }

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文