如何解决什么时候调用实时数据观察者?
单击按钮时,我必须从 API 调用中获取一些值,然后启动一个屏幕。我有两个选择:
- 每次用户点击按钮时调用观察者。
- 在 onActivityCreated() 片段上调用观察者并将值存储在变量中,并在按钮点击时采取相应的行动。
那么我应该遵循哪种方法?
解决方法
其实这取决于你。但我总是更喜欢在 Activity 的 onCreate() 函数中调用它,所以 Activity 只有 1 个观察者。如果你在按钮点击中调用它,它会给你和按钮点击一样多的观察者
这是一些例子:
class HomeProfileActivity: BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initObserver()
initView()
}
private fun initObserver() {
viewModel.profileWorkProccess.observe(this,{
swipeRefreshLayout.isRefreshing = it
})
viewModel.isLoadingJobs.observe(this,{
layoutProgressBarJobs.visibility = View.VISIBLE
recyclerViewJobs.visibility = View.GONE
dotsJobs.visibility = View.GONE
})
//other viewmodel observing ......
}
private fun initView() {
imageProfile.loadUrl(user.image,R.drawable.ic_user)
textName.text = identity.user?.fullName
textAddress.text = identity.user?.city
buttonGetData.setOnClickListener { viewModel.getData(this) }
}
}
,
如果按钮放在Activity上,而数据显示在Fragment中,则需要在Activity ViewModel中存储变量,并在Fragment中观察
创建fragment时只需要调用一次observe。
例如:
class MyActivity : AppCompatActivity() {
val viewModel: MyActViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
myButton.setOnClickListener { view ->
viewModel.getData()
}
}
}
class MyActViewModel: ViewModel {
val data: LiveData<String> = MutableLiveData()
fun getData() {}
}
class MyFragment: Fragment {
val actViewModel: MyActViewModel by activityViewModels()
override fun onActivityCreated(...) {
....
actViewModel.data.observe(viewLifecycleOwner,Observer { data ->
...
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。