我的视图模型中包含以下内容:
// hold the list of comments of a Post
private val _commentsOfPost = MutableLiveData<PagedList<Comment>>()
val commentsOfPost : LiveData<PagedList<Comment>> = _commentsOfPost
fun getCommentsOfPost(postId: Long){
_commentsOfPost.value = commentRepository.
问题
--我希望重构安卓ViewModel (VM)中不可变视图状态的值,以便执行以下操作:
干净地更新VM中的视图状态,而不复制整个视图状态
将视图状态数据保持不变,以观察的更新。
我使用LiveData构建了一个(UDF)模式,以更新在视图中观察到的VM中的视图状态变化。
请参阅:
完整示例代码:
实现
现有的实现使用嵌套的LiveData。
将视图状态存储在VM中的一个LiveData val
作为不可变的LiveData的视图状态属性的嵌套val
// Stored as viewState LiveData val in VM
data class F
我是安卓系统中的新手,我正在开发一个应用程序,它可以从服务器上检索数据,在kotlin使用retrofit、kodein和MvvM,我在我的应用程序中设置了一个导航抽屉,目的是当我单击导航抽屉的条目时,新的活动打开,在这个活动中,我想显示回收视图,但是当新的活动打开时,不能在回收器上设置listitem,我在存储库和视图模型类中调试我的代码,我看到他们收到了数据,我在新的活动中调试了我的代码,我看到模型不能接收这些数据,并且在我的viewmodel.observe代码旁边设置无效的图标。
这是我的存储库类:
fun getdigitalproduct(): LiveData<List&
使用Android更新视图的“正确”方式似乎是LiveData。但我不能确定将其与模型联系起来的“适当”方式。我见过的大多数文档都显示了连接到Room,它返回一个LiveData对象。但是(假设我没有使用房间),在我的模型中返回一个LiveData对象(它是“生命周期感知的”,所以特定于安卓的活动/视图框架)对我来说似乎违反了关注点分离?
下面是一个包含Activity的示例。
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
su
在安卓系统中,网络操作通常是在ViewModel内部进行的。这确保了即使在重新创建Activity或Fragment (例如,当设备被旋转时),网络调用仍在继续,而不是取消。
现在,将来自ViewModel的网络请求的结果提交给视图(Activity/Fragment)。您有一个反应性组件(如LiveData或Observable )来设置它的值。比如:
val resultLiveData = MutableLiveData<Result>()
fun doNetworkRequest() {
repository.requestSomeResult() // Ass
今天我有一些关于android上的mvvm和数据绑定的问题,
我正在尝试绑定视图上的对象属性。
我有一个对象(Model),它有一些属性,例如:
public String name;
public String title;
public int value;
我有一个带有livedata的ViewModel,像这样:
MutableLiveData<Object> _obj = new MutableLiveData<>();
public LiveData<Object> obj = _obj;
最后,我有一个这样的观点:
<layout>
我是一个安卓初学者,只是在寻找一些关于应用程序架构的建议--特别是关于使用ViewModels的建议。没有本地数据库,每个屏幕发出一个新的网络请求。我以后会去实现房间或类似的东西。
主要活动(电影列表)
我有一个具有100%大小循环视图的活动,它显示一个电影列表,回收视图中的每一部电影都有一个封面图像,用户可以触摸它来导航到一个播放器视图。MainActivity (以及它的回收商视图)是由一个ViewModel支持的。Movie (由LiveData包装)有您期望的东西,如标题、类别、封面图像、mp4文件的url。
private val movies = MutableLiveData&l
我想在安卓应用程序中遵守MVVM结构。现在我有个情况:
我希望重复从网络获取数据并更新视图。
我的代码是这样的:
public class FooVm() {
private MutalbeLiveData<Data> data = new MutableLiveData();
private Timer timer;
public LiveData<Data> getData() {
if (data == null) {
data = new MutableLivedata();
当我们通常使用房间时,我们使用Kotlin Coroutine,并制作一把刀来访问房间并得到结果。大多数函数在函数开始时通常都有suspend修饰符,而LiveData和Flow则是其中之一。例如,让我们看看下面这两段代码。
@Query("SELECT * FROM MockTable")
suspend fun allMockDataWithSuspend(): List<MockData>
@Query("SELECT * FROM MockTable")
fun allMockData(): Flow<List<MockData
我正在使用Kotlin和Android架构组件(ViewModel,LiveData)构建一个新的安卓应用的架构,我也使用Koin作为我的依赖注入提供者。
问题是我不能通过koin注入在我的BaseActivity中以通用的方式初始化ViewModel。当前代码如下所示:
abstract class BaseActivity<ViewModelType : ViewModel> : AppCompatActivity() {
// This does not compile because of the generic type
private val view
我在我的安卓应用中使用了。
由于这是一个我发现真的很难发现的模式,我的计划是在屏幕底部添加一条小消息,直到用户最终发现它并成功地通过滑动打开它。
我知道我可以使用:
public void onDrawerOpened(View drawerView) {
// Stop telling the user, he know how it works
}
但当在ActionBar中使用左上角按钮打开它时,也会触发此操作。
任何检测到成功刷屏的建议都将受到热烈欢迎。