如何解决Android-实时数据无法与recyclerview一起使用
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 举报,一经查实,本站将立刻删除。