我正在尝试想出一种方法让EditText更新ViewModel的数据并同时观察该数据的任何更改(例如,通过操作数据库带来的更改)。有没有办法在不使用数据绑定(bind)库的情况下做到这一点?我在简单地使用MutableLiveData时面临的主要问题如下:当用户在EditText中输入文本时,TextWatcher会触发ViewModel以更新其数据,这反过来会将新文本设置到MutableLiveData对象。因为EditText正在观察LiveData,所以会触发onChange并相应地设置EditText的文本,这又会再次触发TextWatcher,从而形成无限循环。
我处于以下场景:我有一个包含ViewModel的OnboardActivity,我可以多次旋转这个OnboardActivity和ViewModel跨配置更改持续存在而不会出现问题。但是,如果我使用startActivityForResult(...)在这个(OnboardActivity)之上启动另一个Activity(FirebaseAuthActivity),然后在FirebaseAuthActivity中旋转设备并按下后退按钮。当OnboardActivity被带到堆栈的顶部时,它会再次重新创建ViewModel实例。这是ViewModel在架构组件中的正常行为吗?当Onboa
我正在使用MvvmCross开发Xamarin.Android应用程序。每次我在RELEASE配置下启动应用程序时,它都会在启动时崩溃并出现以下错误:Cirrious.CrossCore.Exceptions.MvxException:FailedtoconstructandinitializeViewModelfortypeDroidApp.Core.ViewModels.MainViewModelfromlocatorMvxDefaultViewModelLocator-checkMvxTraceformoreinformation此应用程序在DEBUG配置下运行良好。在我更新代码
我发现了一个架构组件ViewModel没有被保留的情况——简而言之,它是这样的:Activity启动并创建ViewModel实例Activity置于后台设备屏幕旋转Activity回到前台调用ViewModel的onCleared方法并创建新对象在这种情况下,我的ViewModel实例被破坏是Android的正常行为吗?如果是这样,是否有任何推荐的保持其状态的解决方案?我能想到的一种方法是在调用onCleared后保存它,但是,它也会在Activity实际完成时保持状态。另一种方法是使用onRestoreInstanceState但它会在每次屏幕旋转时触发(不仅是在应用程序处于后台时)
我正在努力选择将数据从broadcastReceiver传递到ViewModel的正确方法,然后从那里将数据传递到我的存储库并更新LiveData。我使用FCM推送通知并拥有使用ActivityLifecycle的本地broadCastReceiver。我发现从BroadcastReceiver访问ViewModel是不好的做法,但不确定为什么?如果我管理broadcastReceiver的生命周期,它应该不会引起任何问题...那么将接收到的数据从FCM传递到我的存储库的MediatorLiveData的最佳方法是什么?我使用MediatorLiveData,因为我添加了不同的实时数据
我在我的项目中使用MVVM、Retrofit、LiveData,但在我看到这些链接之前出现此错误CannotcreateaninstanceofcustomViewModelCannotcreateaninstanceofclassViewModel错误java.lang.RuntimeException:UnabletostartactivityComponentInfo{ir.orangehat.movieinfo/ir.orangehat.movieinfo.application.home.HomeActivity}:java.lang.RuntimeException:Can
我想我在这里遗漏了一些明显的东西,但是......我将数据存储在DiaryViewModel类的uiModel中,并且由于我使用架构组件,所以我希望通过屏幕旋转保留数据-但事实并非如此。我不知道为什么。这是一个精简的fragmentclassDiaryFragment:Fragment(){privatelateinitvarviewModel:DiaryViewModeloverrideonCreateView(...){viewModel=ViewModelProviders.of(this).get(DiaryViewModel::class.java)viewModel.get
我的项目中有一个复杂的屏幕,我将其分成多个fragment。我试图遵循这些类的MVVM架构,所以哪个fragment有自己的ViewModel和契约(Contract)类。问题是所有ViewModel都需要相同的对象实例(我们称它为Book)来执行Room事务。是否有在ViewModel之间共享数据(或LiveData)的正确方法?我知道SharedViewModel的概念,但我不知道我是否可以将它应用于这种情况。我也考虑过使用MediatorLiveData但也没有找到好的方法。我正在考虑用BookObservableProvider上课(我们称之为LiveData)(或RxSubj
MVVM架构,这是我的View(Activity):privateMyAppapp;privateMainActivityVMviewModel;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);app=(MyApp)this.getApplication();ActivityMainBindingbinding=DataBindingUtil.setContentView(this,R.layout.activity_main);MainActivit
所以我正在尝试使用Robolectric为我的Activity编写单元测试,但是我不知道如何提供模拟View模型,因为我的虚拟机是如何在类中直接实例化的。这是因为Jetpack的生命周期感知ViewModel需要一个Provider类来实例化。所以,我实际上是在注入(inject)自定义提供程序,然后使用它来创建我的ViewModel。我看过其他示例,但它们看起来都非常令人困惑。我如何实现这一点?classActivityEpisodeList:AppCompatActivity(){@InjectlateinitvarvmFactory:ViewModelProvider.Facto