我正在探索Google的AndroidArchitectureComponents.在我的项目中,我依赖Services和IntentServices.与应用程序的ViewModel通信的正确方式是什么?来自IntentService或服务?使用LiveData可以实现吗? 最佳答案 TL;DR这是可以实现的——使用观察者关系。您的IntentService和可能的位置服务应该不知道您的ViewModel。考虑使用存储库。可以使用LiveData(参见postValue)。它有利于更新UI(ViewModel到Activity的通信
我正在尝试实例化一个ViewModel以在我的所有Activity中使用。publicclassLaunchActivityextendsActivity{privateControllercontrol;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_launch);control=ViewModelProviders.of(this).get(Controller.class);}}
我正在学习Android编程的新架构组件,但我很难理解Activity的职责是什么。我知道他们只应该处理UI,这是有道理的,但到什么程度呢?假设我有一个Activity,最初有一个EditText,用户可以在其中输入字符串。在此下方有一个按钮,用于添加另一个EditText供用户输入另一个String。这些数据应该如何在幕后处理?我提出的两个解决方案如下:1)处理ViewModel中的数据。用户点击按钮->Activity告诉ViewModel->ViewModel维护EditTexts列表->当用户完成后,Activity告诉ViewModel->ViewModel处理数据我看到这种
我正在构建一个定位应用程序,我在其中显示来self的MainActivity中的Room数据库的背景位置。我可以通过调用获取ViewModellocationViewModel=ViewModelProviders.of(this).get(LocationViewModel.class);locationViewModel.getLocations().observe(this,this);当我通过BroadCastReceiver接收位置更新时,周期性的背景位置应该保存到Room数据库中。它们应该通过调用locationViewModel.getLocations().setVal
查看ViewModel文档,它说:Inotherwords,thismeansthataViewModelwillnotbedestroyedifitsownerisdestroyedforaconfigurationchange(e.g.rotation).Thenewinstanceoftheownerwilljustre-connectedtotheexistingViewModel.如果引用它的Activity被销毁,ViewModel如何不被销毁?一旦我们创建了一个新的Activity,它是如何重新连接的? 最佳答案 幕后
我尝试理解ViewModel。我创建ViewModel:publicclassUsersViewModelextendsViewModel{privatefinalUsersRepositoryusersRepository;publicUsersViewModel(UsersRepositoryusersRepository){this.usersRepository=usersRepository;}publicLiveData>loadAll(){returnusersRepository.getAll();}}但我不明白两件事:如何将UsersRepository注入(inje
我在Recyclerview中有一个列表对象。当长按一个项目时,我想显示一个对话框,其中包含单击项目的数据。Recyclerview为每个项目使用数据绑定(bind),我可以在长按时使用Log显示所选项目的数据。但是,当尝试显示对话框时,您需要访问Activity,不建议在ViewModel对象中使用它。那么如何显示对话框呢?谢谢,欧维 最佳答案 从概念上讲,我认为ViewModel是启动对话框的错误位置。为了更干净地做到这一点,我会将RecyclerView.ViewHolder传递到布局中,并在ViewHolder上有一个方法来
我在使用ViewModel和LiveData架构组件时遇到问题。当使用fragments并旋转屏幕时,观察者会被触发...我试图移动viewModel=ViewModelProviders.of(this).get(MainViewModel::class.java)在所有fragment生命周期方法中,但没有成功。我的场景相对简单:带有电子邮件和密码的登录屏幕用户点击“登录”按钮viewmodel调用login(email,password)并设置LiveData对象的值暂时简单地toast此时一切正常。但是当我旋转屏幕时,Toast会再次出现而无需任何用户交互。我必须在onDest
我目前正在为我的android应用程序项目使用databinding。我想在我的CustomTextView上设置来自R.string.txtOldPassWordError的error消息,并从另一个名为ViewModelClass.这是我的XML代码这是ViewModelClass.javapublicclassChangePasswordViewModelextendsBaseObservable{publicObservableFielduserOldPassword=newObservableField("");publicvoiduserPasswordChange(){i
在Lifecycle和LiveData之前,Viewmodel可以很容易地观察到它自己的可观察对象的变化。只需订阅Observable*的更改并对它们使用react即可。然后可能会使用双向绑定(bind)来立即对用户的输入使用react。在AndroidStudioCanary中,现在允许绑定(bind)到LiveData对象,前提是Binding知道其所有者的生命周期(ViewBinding现在有额外的setLifecycle方法),AndroidStudioCanaryinformation:YoucannowuseaLiveDataobjectasanobservablefiel