问题描述
LiveData没有触发。我在同一片段中运行了许多实时数据,但其中之一只是无法正常工作。我不知道是什么问题。
ViewModel.kt(部分代码已减少。)
class MyAccountViewModel : ViewModel() {
private val _dataUser = MutableLiveData<User>()
val dataUser: LiveData<User>
get() = _dataUser
private val _userState = MutableLiveData<UserViewState>()
val userState: LiveData<UserViewState>
get() = _userState
private val _storiesState = MutableLiveData<StoriesViewState>()
val storiesState: LiveData<StoriesViewState>
get() = _storiesState
private val _dataStories = MutableLiveData<List<Stories>>()
val dataStories: LiveData<List<Stories>>
get() = _dataStories
private val _navigateToStories = MutableLiveData<Long>()
val navigateToStories: LiveData<Long>
get() = _navigateToStories
fun openUserStories(userId: Long) {
_navigateToStories.postValue(userId)
}
}
片段
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
observe(viewModel.dataUser,::onViewUserDataChanged) //WORKING
observe(viewModel.userState,::onViewUserStateChanged) //WORKING
observe(viewModel.dataStories,::onViewStoriesDataChanged) //WORKING
observe(viewModel.storiesState,::onViewStoriesStateChanged) //WORKING
observe(viewModel.navigateToStories,::onViewEvent) //NOT WORKING
}
private fun onViewEvent(viewEvent: Long) {
findNavController().navigate(
MyAccountFragmentDirections.
actionMyAccountFragmentToMediaShowFragment(viewEvent)
)
}
observe()方法:
fun <T> LifecycleOwner.observe(liveData: LiveData<T>,observer: (T) -> Unit) {
liveData.observe(this,Observer {
it?.let { t -> observer(t) }
})
}
fun <T> LifecycleOwner.observe(liveData: MutableLiveData<T>,Observer {
it?.let { t -> observer(t) }
})
}
具有数据绑定的onClick(已减少了部分代码。):
<androidx.constraintlayout.widget.ConstraintLayout
android:onClick="@{() -> viewModel.openUserStories(stories.id)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</androidx.constraintlayout.widget.ConstraintLayout>
这是我应用onClick方法的recyclerview项。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)