草庐IT

Jetpack学习之ViewModel、Lifecycles、LiveData

全部标签

android - 如何更新 LiveData 值?

我正在为我的数据使用新的分页库。创建ViewModel并首次初始化实时数据时,一切正常。问题是我无法更新实时数据的值,例如,当我单击菜单项并想用另一组数据更新它时。然后我的fragment中的onChanged方法不会被调用。我已经阅读了有关MutableLiveData以及setValue和postValue等可以更新实时数据的方法,但就我而言,我使用的是LivePagedListProvider并且无法从数据库返回MutableLiveData。道:@Query("SELECT*FROMteamsORDERBYnameASC")LivePagedListProvidergetAll

ViewModel组件的使用和生命周期管理

ViewModel介绍ViewModel是Jetpack组件之一,用于帮助管理UI数据和处理设备配置变化。它允许在应用程序的不同组件之间共享和管理数据,并且可以帮助避免内存泄漏和减少对生命周期的依赖。ViewModel通常用于存储和管理与UI相关的数据,例如界面上的文本、列表数据等。它可以存活于Activity或Fragment的生命周期之外,并且在设备配置变化时保持数据的一致性。在使用ViewModel时,通常需要创建一个继承自ViewModel的子类,并在其中定义需要共享和管理的数据。然后在Activity或Fragment中通过ViewModelProvider来获取ViewModel的

android - 直接实例化 ViewModel,不使用 ViewModelProviders.of 方法

我有一个名为RecipesViewModel的ViewModel。通常,我这样实例化它:RecipesViewModelviewModel=ViewModelProviders.of(this,newViewModelProvider.Factory(){@OverridepublicTcreate(ClassmodelClass){return(T)newRecipesViewModel(recipesRepository);}}).get(RecipesViewModel.class);但现在我使用的是dagger2,所以我在这个ViewModel的构造函数上添加了一个@Injec

architecture - 如何正确地确定 ViewModel 的范围?

我正在努力思考新的Android架构组件,特别是ViewModel。我的印象是Fragment不应该知道它属于哪个Activity或Fragment,以便它可以在应用程序的不同上下文中使用。这些示例似乎通过直接在Fragment中而不是Fragment所有者中声明ViewModel范围来与此相矛盾:viewModel=ViewModelProviders.of(getActivity()).get(SomeViewModel.class);我希望能够在Master/Detail配置中使用此Fragment,其中两者共享相同的状态(即ViewModel实例),以及在ViewPager内部

android - 在没有生命周期所有者的情况下使用 LiveData

如果在没有生命周期所有者的情况下使用LiveData是个坏主意,我找不到任何信息。如果是,还有什么替代方案?举个简单的例子classItem(){privatelateinitvarproperty:MutableLiveDatainit{property.value=false}fungetProperty():LiveData=propertyfuntoggleProperty(){property.value=when(property.value){false->trueelse->false}}}classItemHolder{privatevalitem=Item()pri

android - 如何在订阅 liveData 后仅针对新更新观察 liveData

使用PagedList,这里没有数据库备份,而是内存中的数据列表(称其为CachedDataList),可以通过fetchMore()填充功能。有了PositionalDataSource、DataSource.Factory和PagedList.BoundaryCallback,它可以工作,但这里有一个问题。流程是PositionalDataSource的loadInitial()开始会被调用,开始从CachedDataList加载数据,并调用loadRange()之后继续按页面大小从CachedDataList加载数据。当CachedDataList中的所有数据都被分页时,将调用B

android - ViewModel 中的实例成员 LiveData 变量?

在使用Android几年后,我试图了解Android架构组件。阅读官方文档和一些博客后,让我感到困惑的一件事是在哪里创建LiveData变量。在下面的第一个变体中,我只在存储库类中创建了一个livedata变量,而在两个变体中的第二个变体中存储库和View模型类。两种变体都有效。第一个变体:publicclassScoreViewModelextendsAndroidViewModel{privateScoreRepositorDBscoreRepo;publicScoreViewModel(Applicationapplication){super(application);scor

android - ViewModel 观察者方法返回 null

我收到以下错误Attempttoinvokevirtualmethod'voidandroid.arch.lifecycle.LiveData.observeonanullobjectreference来self的主要fragment中的以下代码部分mReleasesViewModel=ViewModelProviders.of(this).get(ReleasesViewModel.class);mReleasesViewModel.getUpcomingReleases(filter).observe(this,newObserver>(){@Overridepublicvoido

android - 在 fragment onCreateView 或 onCreate 方法中哪个是初始化 ViewModel 的最佳位置?

我在ViewModel中使用实时数据。我有一个场景,其中有两个fragment和一个Activity。fragmentA和fragmentB。在Activity中,我启动了FragmentA(它显示名称列表,即从后端获取),当我点击Name时,它​​显示FragmentB(这是返回堆栈)。现在,如果我在fragmentB中按下后退按钮,它会返回到fragmentA,它会显示一个空白屏幕,因为我已经在fragmentA的onCreate方法中实现了ViewModel。但是如果我在fragmentA的oncreateView方法中实现了ViewModel,它将继续添加观察者,因为fragm

Java学习之CharSequence(字符序列)接口

字符序列(CharSequence)1、相关接口java.lang.CharSequence接口java.lang.Appendable接口java.lang.Comparable接口java.io.Seralization接口2、java.lang.String2.1、概念:String是个类characterstrings才是字符串1、在Java语言中直接使用“”引起来的多个字符就是字符串(characterstrings)2、在Java源代码中直接使用“”引起来的字符串都是java.lang.String的实例3、String类是个不可变类将来创建的每个String实例都是不可变的对象【