class MyViewModel(application: Application) : AndroidViewModel(application) {
...
fun getUser(id: String): LiveData<User> {
return repository.getUser(id)
}
}
class MyFragment : Fragment() {
private lateinit var myViewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.run {
myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
} ?: throw Exception("Invalid Activity")
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
button.setOnClickListener {
showProgressBar()
myViewModel.getUser(editText.text.toString()).observe(this, Observer { it ->
//TODO
})
}
}
}
class MainActivity : AppCompatActivity() {
private lateinit var myViewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
myViewModel = ViewModelProviders.of(this).get(MyViewModel::class.java)
//Here I would like to observe the user instance returned from the getUser() method
}
}
因此,我遇到的问题是,我希望在MyViewModel
中有一个LiveData
的实例,以便在活动和片段中观察它。我怎样才能做到这一点?
在类MyViewModel create中
val userLiveData =MutableLiveData<User>()
和吸气剂
fun getUserLiveData(id: String): MutableLiveData<User> {
return userLiveData
}
fun getUser(id: String){
val disposableUser = repository.getUser(id)
.subscribe({
userLivedata.postValue(it)
})
}
myViewModel.getUserLiveData.observe(this, Observer { it ->
//TODO
})
myViewModel.getUser(...)
在onViewCreated中,我设置了Observer对象,以便在LiveData中所做的任何更改都可以在这里得到更改通知: 在ViewModel类中,我将LiveData参数设置为: 在init中,我设置了一个观察者:
我是一个新的Android开发人员,我正试图观察ViewModel中的布尔集。当应用程序启动时,我可以观察到它的初始状态,但以后应用的任何更改似乎都不会触发观察者(即当我切换片段时)。 下面是我的ViewModel的代码: 万事如意, 晶圆厂。
> 导航组件在HomeFragment中启动新的ProfileFragment。 在片段中创建ViewModel(PriceGraphFragment)。ViewModel已经被记录,并且具有多个观察者的数据只在ViewModel中初始化一次数据。 > 在onCreate()方法中创建片段的ViewModel。 使用片段的活动和子片段的父片段创建ViewModel。 null 问题可能与在pare
此外,为什么Viewmodel不能观察到它自己的LiveData的变化?
我使用LiveData从DB中选择信息,并将其传递给我的活动(通过DAO、Repository&Viewmodel),依赖于一段时间的日期。当我更改timespan时,我希望删除LiveData上的旧观察者,并为新的timespan创建新的观察者。 但是,在调用和(其中timespan是之前的另一个时间戳)之后,两个观察器都调用了方法,尽管旧的方法不再活动(我使用和检查了这一点) 有什么建议吗?
我有一个单独的类来处理数据提取(特别是Firebase),我通常从它返回LiveData对象并异步更新它们。现在我希望将返回的数据存储在ViewModel中,但问题是为了获得所述值,我需要观察从数据提取类返回的LiveData对象。observe方法需要一个LifecycleOwner对象作为第一个参数,但我的ViewModel中显然没有这个对象,而且我知道我不应该在ViewModel中保留对ac