[英]LiveData doesn't triggered observing it from Fragment
我有一个片段,它观察 ViewModel 中包含的 LiveData 以在 RecyclerView.Adapter 中传递信息。 Fragment 中的 LiveData 没有被触发,但是如果我在一个 Activity 中移动它,它就会被触发。
这是代码:
class ProfileViewModel : ViewModel() {
private val profileLiveData: MutableLiveData<User> = MutableLiveData(
private val followersPreview: LiveData<Query> =
Transformations.map(profileLiveData) { profile ->usersApi.getFollowers(profile.followers) }
private val followingPreview: LiveData<Query> =
Transformations.map(profileLiveData) { profile -> usersApi.getFollowing(profile.following) }
fun getProfile(userDocumentId: String): LiveData<User> {
usersApi.getProfile(userDocumentId)
.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
if (firebaseFirestoreException != null) {
Log.d("Exception get profile", firebaseFirestoreException.message!!)
// Handle exception
}
val profileUser: User = querySnapshot?.toObject(User::class.java)!!
profileLiveData.value = profileUser
}
return profileLiveData
}
fun getProfileFollowers(): LiveData<Query> {
return followersPreview
}
}
class ListsProfileFragment : Fragment() {
private lateinit var fragmentListsBinding: FragmentListsProfileBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
fragmentListsBinding = FragmentListsProfileBinding.inflate(layoutInflater)
return fragmentListsBinding.root
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val profileViewModel = ViewModelProviders.of(this).get(ProfileViewModel::class.java);
Log.d("Viewmodel", profileViewModel.toString())
profileViewModel
.getProfileFollowers()
.observe(viewLifecycleOwner,
Observer {
it.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
val followers = mutableListOf<UserPreview>()
querySnapshot?.documents?.forEach { doc ->
val follower: UserPreview = UserPreview(
doc.get("username") as String,
doc.get("profileImage") as String
)
followers.add(follower)
}
fragmentListsBinding.recyclerViewFollowers.layoutManager =
LinearLayoutManager(this.activity, RecyclerView.HORIZONTAL, false)
fragmentListsBinding.recyclerViewFollowers.adapter =
AccountsAdapter(followers)
}
})
}
有人可以帮助我吗? 提前致谢。
解决了使用此代码加载 ViewModel:
profileViewModel =
activity?.run { ViewModelProviders.of(this).get(ProfileViewModel::class.java) }
?: throw Exception("Invalid Activity")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.